在使用 Tapestry 创建 Web GUI 作为表示层时,我在如何处理和处理域对象引发的已检查异常方面遇到了一些困境。
假设我有一个域对象 Foo
,它在其方法之一上抛出 FooException
:
public class Foo {
...
public void fooMethod throws FooException() {
...
}
...
}
现在,假设我有一个名为 Bar
的 Tapestry 页面,其中的 Foo
对象正在使用 BeanEditor
进行编辑。
现在,为了确保非法值不会传递给 BeanEditor
来创建 Foo
对象,我可以想到两种基本方法:
使用
@Validate
注释进行 Tapestry 字段验证在这种情况下,如果我们可以通过正则表达式或通过限制值或执行
@Validate
提供的类似操作来过滤和检查输入,我们将在我们的字段旁边收到一条漂亮的错误消息重新编辑,提交将失败,从而使用户思考他在那里写的内容以及如何修复它。捕获域异常并据此执行操作
我认为这种情况提供了更多关于什么可以做、什么不能做的选择。例如,如果用户需要输入
URL
并且在输入时出错,则URL
构造函数将抛出自己的MalformedURLException
。我们可以在 Java 代码中捕获该异常,但我的问题是,下一步该做什么以及如何做?
Tapestry 是否提供任何处理域异常(选中和/或未选中)的特殊机制,除了当事物崩溃时弹出的异常窗口?
有没有关于如何解决这个特定问题的模式?
常见异常和普通异常(例如 IndexOutOfBoundsException
)和某些特定于域的异常(例如 FooException
)之间的界限在哪里?
:D
最佳答案
最好的方法是将验证应用于字段。一种方法是使用@Validate。另一种是通过添加 Tapestry-beanvalidator 来使用 Bean Validation (JSR 303) 注释,解释如下:http://tapestry.apache.org/bean-validation.html .
此外,在 Tapestry 中,所有表单字段组件在将值应用于属性之前都会触发“验证”事件。
http://tapestry.apache.org/forms-and-validation.html解释了这一切。例如,假设您有一个 t:id 为“count”的表单字段,您可以通过声明事件处理程序方法来验证它:
void onValidateFromCount(Integer value) throws ValidationException {
if (value == 13) throw new ValidationException("Thirteen is an unlucky number.");
}
关于java - 在 Tapestry Web 应用程序中处理域异常的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19384822/