0

在使用 Tapestry 创建 Web GUI 作为表示层时,我在如何处理和处理域对象抛出的检查异常方面遇到了一些难题。

假设我有一个域对象,Foo它抛出FooException了它的一种方法:

public class Foo {
    ...
    public void fooMethod throws FooException() {
        ...
    }
    ...
}

现在,假设我有一个 Tapestry 页面,名为Barwhere Fooobject is,例如,正在使用BeanEditor.

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

  1. @Validate使用注释 的 Tapestry 字段验证

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

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

    我认为这种情况提供了更多关于可以做什么和不可以做什么的选择。例如,如果 used 需要进入URL并在这样做时出错,则URL构造函数将抛出自己的MalformedURLException. 我们可以在 Java 代码中捕获该异常,但我的问题是,下一步该做什么以及如何做?

Tapestry 是否提供处理域异常(检查和/或未检查)的任何特殊机制,除了当事情破裂时弹出的异常窗口?

有没有关于如何解决这个特定问题的模式?

您在哪里划定常见异常和普通异常(如IndexOutOfBoundsException)和某些特定领域的异常(如 )之间的界限FooException

:D

4

1 回答 1

2

最好的方法是将验证应用于字段。一种方法是使用@Validate。另一种是通过添加 Tapestry-beanvalidator 来使用 Bean Validation (JSR 303) 注释,此处解释:http: //tapestry.apache.org/bean-validation.html

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

http://tapestry.apache.org/forms-and-validation.html解释了这一切。例如,假设您有一个 at:id 为“count”的表单字段,您可以通过声明一个事件处理程序方法来验证它:

void onValidateFromCount(Integer value) throws ValidationException {
    if (value == 13) throw new ValidationException("Thirteen is an unlucky number.");
}
于 2013-10-17T00:00:42.150 回答