【发布时间】:2010-07-14 12:42:56
【问题描述】:
我有一个内部包含 CRUD 操作的 Action 类,并且我已经覆盖了 ActionSupport 类提供的 validate() 方法。
问题是:如何仅针对更新和创建操作触发验证?
一种可能的解决方案是将创建和更新移动到全新的 Action 类上,但我想知道是否有其他解决方案。
谢谢! 罗伯托
【问题讨论】:
标签: java validation struts2
我有一个内部包含 CRUD 操作的 Action 类,并且我已经覆盖了 ActionSupport 类提供的 validate() 方法。
问题是:如何仅针对更新和创建操作触发验证?
一种可能的解决方案是将创建和更新移动到全新的 Action 类上,但我想知道是否有其他解决方案。
谢谢! 罗伯托
【问题讨论】:
标签: java validation struts2
您也可以使用您不希望验证的方法尝试 @SkipValidation 注释:
@SkipValidation
public String yourMethod(){
...
return SUCCESS;
}
【讨论】:
我相信这两个选项是:将可验证的方法重构为新的操作(如您所说),或切换到程序验证(而不是声明式)。基本上,从你的更新/创建方法中调用myvalidate(),如果有错误返回INPUT。
【讨论】:
您可以通过在配置文件中添加排除项来排除其他方法。
<interceptor-ref name="validation">
<param name="validateAnnotatedMethodOnly">true</param>
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
【讨论】:
如果您使用 Struts 的 defaultStack 拦截器,您已经从称为 input、back、cancel 或 browse 的方法中排除了验证。
我建议您制作自己的拦截器堆栈(所有操作的默认设置,因此您不必为每个操作重新定义这些东西)。基于 struts-default.xml 中适合您的示例堆栈,然后编辑拦截器引用以进行验证和工作流(这些密切相关——工作流拦截器是跳过操作并返回“输入”的拦截器)如果存在验证错误,则采取行动——因此方法排除应匹配)。
在我当前的项目中,我为 *Form 和 *Input 添加了例外,因此默认情况下会启动验证,但很容易避免 - 只需确保您调用的操作方法以 Form 或 Input 结尾。
默认情况下运行验证通常会更好(并定义异常),因为如果您犯了错误并且在您不想要的时候运行验证,您会立即知道(由于错误,您的操作不会执行) .. 而如果你犯了一个错误并且验证没有运行,这是一个静默失败。
【讨论】: