Java struts2-为什么使用声明性验证?

Java struts2-为什么使用声明性验证?,java,xml,validation,struts2,declarative,Java,Xml,Validation,Struts2,Declarative,在struts2中,基本上有两种方法来引入验证:您也可以这样做 以编程方式,或 声明性地 编程验证主要涉及在action类上实现接口validable,方法void validate()将需要充实。如果要向用户报告验证问题,则存在更复杂的界面ValidationAware 在声明性验证中,要验证的每个操作都会获得自己的名为myactionname validation.xml的验证文件,在该文件中,使用xml描述语言声明验证程序 在我工作的公司,我们使用编程验证原则,使用小型验证框架(内部

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

  • 以编程方式,或
  • 声明性地
编程验证主要涉及在action类上实现接口
validable
,方法
void validate()将需要充实。如果要向用户报告验证问题,则存在更复杂的界面
ValidationAware

在声明性
验证中,要验证的每个操作都会获得自己的名为
myactionname validation.xml的验证文件,在该文件中,使用xml描述语言声明验证程序


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

我看到一些通常支持声明式XML样式配置的参数,但我看不到它们在这里的应用:更改此配置(即验证)与操作处理的模型以及用于修改模型上的值的GUI紧密耦合。这不是不需要重新编译就可以“动态”配置的东西

struts2中有哪些参数可以使用声明式验证

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

以编程方式做这件事不是更容易吗[…]

不是真的,虽然也不是很难。生成错误消息是一个更为手动的过程,但大多数人并没有充分利用XML中的功能

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

不是真的,虽然也不是很难

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

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

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


关键是要在现有机制存在时重用它们:这是一个简单的、已知的机制,集成在框架中,每个使用S2应用程序的人都知道它是如何工作的。

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

例如,如果使用Visitor validator(验证JSP中的对象列表),则将.xml文件放在对象包(具有对象名称)中,而不是放在操作包中;如果在多个操作中使用该对象,则编写一次其验证规则,并重复使用它多少次

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


看看你可能想知道的一些技巧。

关于它的价值,我更喜欢编程方法,我已经使用该框架大约五年了。