Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Tapestry web应用程序中处理域异常的最佳方法是什么?_Java_Validation_Exception Handling_Domain Driven Design_Tapestry - Fatal编程技术网

Java 在Tapestry web应用程序中处理域异常的最佳方法是什么?

Java 在Tapestry web应用程序中处理域异常的最佳方法是什么?,java,validation,exception-handling,domain-driven-design,tapestry,Java,Validation,Exception Handling,Domain Driven Design,Tapestry,在使用Tapestry创建web GUI作为表示层时,如何处理由域对象引发的已检查异常,我遇到了一些难题 假设我有一个域对象,Foo,它在它的一个方法上抛出footexception: public class Foo { ... public void fooMethod throws FooException() { ... } ... } 现在,假设我有一个名为Bar的Tapestry页面,其中Foo对象正在使用BeanEditor进行编辑

在使用Tapestry创建web GUI作为表示层时,如何处理由域对象引发的已检查异常,我遇到了一些难题

假设我有一个域对象,
Foo
,它在它的一个方法上抛出
footexception

public class Foo {
    ...
    public void fooMethod throws FooException() {
        ...
    }
    ...
}
现在,假设我有一个名为
Bar
的Tapestry页面,其中
Foo
对象正在使用
BeanEditor
进行编辑

现在,为了确保创建
Foo
对象时不会将非法值传递给
BeanEditor
,我可以想出两种基本方法:

  • 使用
    @Validate
    注释进行Tapestry字段验证

    在这种情况下,如果我们可以通过正则表达式过滤和检查输入,或者通过限制值或执行由
    @Validate
    提供的类似操作,我们将在正在编辑的字段旁边收到一条漂亮的错误消息,提交将失败,从而让用户思考他在那里写了什么以及如何修复它

  • 捕获域异常并基于它执行操作

    我假设这个场景提供了更多关于什么可以做,什么不能做的选项。例如,如果使用的需要输入
    URL
    并且在输入时出错,那么
    URL
    构造函数将抛出自己的
    MalformedURLException
    。我们可以在Java代码中捕获该异常,但我的问题是,下一步要做什么以及如何做

  • Tapestry是否提供了处理域异常(已检查和/或未检查)的任何特殊机制,而不是在出现问题时弹出的异常窗口

    关于如何解决这个特殊问题,有什么模式吗

    在常见异常和普通异常(如
    IndexOutOfBoundsException
    )以及一些特定于域的异常(如
    footexception
    )之间,您在哪里划分界限


    :D

    最好的方法是对字段应用验证。一种方法是使用@Validate。另一种方法是通过添加tapestry beanvalidator来使用Bean验证(JSR303)注释,如下所述:

    此外,在Tapestry中,所有表单字段组件都会在将值应用于属性之前触发“验证”事件

    解释了一切。例如,假设您有一个t:id为“count”的表单字段,您可以通过声明一个事件处理程序方法来验证它:

    void onValidateFromCount(Integer value) throws ValidationException {
        if (value == 13) throw new ValidationException("Thirteen is an unlucky number.");
    }
    

    不熟悉挂毯。但这可能有助于解决您的普通域规范例外情况。如果您有一个需要填写的值列表,并且根据当前字段的某些属性,每个字段可能需要不同的验证正则表达式,那么如何处理这种情况呢?在我看来,最好的解决方案是为此特定验证创建一个自定义验证器。