Java 在Tapestry web应用程序中处理域异常的最佳方法是什么?
在使用Tapestry创建web GUI作为表示层时,如何处理由域对象引发的已检查异常,我遇到了一些难题 假设我有一个域对象,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进行编辑
Foo
,它在它的一个方法上抛出footexception
:
public class Foo {
...
public void fooMethod throws FooException() {
...
}
...
}
现在,假设我有一个名为Bar
的Tapestry页面,其中Foo
对象正在使用BeanEditor
进行编辑
现在,为了确保创建Foo
对象时不会将非法值传递给BeanEditor
,我可以想出两种基本方法:
@Validate
注释进行Tapestry字段验证
在这种情况下,如果我们可以通过正则表达式过滤和检查输入,或者通过限制值或执行由@Validate
提供的类似操作,我们将在正在编辑的字段旁边收到一条漂亮的错误消息,提交将失败,从而让用户思考他在那里写了什么以及如何修复它URL
并且在输入时出错,那么URL
构造函数将抛出自己的MalformedURLException
。我们可以在Java代码中捕获该异常,但我的问题是,下一步要做什么以及如何做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.");
}
不熟悉挂毯。但这可能有助于解决您的普通域规范例外情况。如果您有一个需要填写的值列表,并且根据当前字段的某些属性,每个字段可能需要不同的验证正则表达式,那么如何处理这种情况呢?在我看来,最好的解决方案是为此特定验证创建一个自定义验证器。