2

在 struts2 中,基本上有两种方法来引入验证:你可以这样做

  • 以编程方式,或
  • 声明式地。

编程验证主要涉及Validatable在您的操作类上实现接口,为此void validate();需要充实该方法。如果要将验证问题报告给用户,则存在一个更复杂的界面ValidationAware

声明式验证中,每个要验证的操作都有自己的验证文件调用myactionname-validation.xml,其中使用 XML 描述语言声明验证器。


在我工作的公司,我们使用程序化验证原则,使用小型验证框架(内部编写)来帮助重用常见的验证器模式。然而,我刚刚读过一本 struts2 的书,声明式验证是首选的方式。这本书提供了很多关于如何设置声明式验证的说明,但是它几乎没有触及为什么声明式方式更可取的主题。

我看到了一些一般性的论点,它们有时支持声明式 XML 样式的配置,但我看不到它们在这里适用:更改此配置(即验证)与处理的模型紧密耦合通过用于修改模型值的操作和 GUI。这不是需要在不重新编译的情况下“即时”配置的东西。

在 struts2 中使用声明式样式验证有哪些论据?

深入研究另一种 XML 标记方言并为处理单独的validation.xml 文件而烦恼是否值​​得?以编程方式执行它不是更容易,而且可能更易于维护,因为 Java 源代码(或者更确切地说是您选择的 IDE)将为您提供重构工具、结构化搜索等,而 XML 配置支持通常充其量是可以容忍的?

4

2 回答 2

1

声明式验证更具可读性、功能强大且可自定义。在编写良好的 Web 应用程序中(良好的 DTO 或 VO 定义,每个要执行的逻辑操作一个操作),您可以通过多种方式共享它。

例如,如果您使用访问者验证器(验证来自 JSP 的对象列表),则将 .xml 文件放在对象包(带有对象名称)中,而不是放在操作包中,并且如果您在多个操作,您编写其验证规则一次,并重复使用它多少次。

我不是 XML 配置的粉丝,但是在以旧方式进行的几个项目之后,我发现了这种验证的全部潜力,我不会再回来了。

看看这个你可能想知道的一些提示。

于 2012-11-02T13:18:48.343 回答
0

以编程方式执行它不是更容易[...]

不是真的,尽管它也不是特别难。构建错误消息是一个更加手动的过程,但是,大多数人并没有使用 XML 中的全部功能。

[...] 可能更易于维护 [...]

不是真的,尽管它也不是特别难。

对于具有代码生成的代码库,IMO 构建 XML 比构建 Java 更容易,但大多数代码库并没有在那个深度使用代码生成。

为了生成人类可读的文档,XML 和注释比 Java 代码更容易处理。

我使用具有相当不错的 S2 支持的 IDE,我从来没有想过“如果我用代码编写它会容易得多”,而且我不记得做过很多(如果有的话)重构我的验证让我希望它是在代码中而不是在 XML 中。

关键是在现有机制存在时重用它们:它是一种微不足道的、已知的机制,集成在框架中,并且每个在 S2 应用程序上工作的人都知道它是如何工作的。

于 2012-11-02T11:08:48.943 回答