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

标签 java validation exception domain-driven-design tapestry

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

假设我有一个域对象 Foo,它在其方法之一上抛出 FooException:

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

现在,假设我有一个名为 Bar 的 Tapestry 页面,其中的 Foo 对象正在使用 BeanEditor 进行编辑。

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

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

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

  2. 捕获域异常并据此执行操作

    我认为这种情况提供了更多关于什么可以做、什么不能做的选择。例如,如果用户需要输入 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/

相关文章:

javascript - 具有多个突出显示字段的表单验证

Javascript验证函数总是回复无效

java - Java Hashtable 的 count 字段何时初始化?

java - 如何创建将添加新属性源的自定义注释

java - 使用自定义方法从返回输出中以 mm/dd/yyyy 格式显示日期

java - 替换 Arraylist 中的空值

python - 使用 Tweepy 将屏幕名称列表转换为用户 ID

java - Resources.getSystem().openRawResource(random.txt) 返回 Resource$NotFoundException

javascript - V-validate 不适用于插值属性

c++ - 从 Lua 调用函数时如何处理 C++ 异常?