在Struts2中验证某些Action的方法

时间:2010-07-14 12:42:57

标签: java validation struts2

我有一个内部有CRUD操作的Action类,我已经覆盖了ActionSupport类给出的validate()方法。

问题是:如何仅针对更新启动验证并创建操作?

一种可能的解决方案是移动创建&更新一个全新的Action类,但我想知道是否有另一个解决方案。

谢谢! 罗伯特

4 个答案:

答案 0 :(得分:3)

我相信这两个选项是:将可验证的方法重构为新的操作(如您所说),或切换到编程验证(而不是声明)。基本上,从更新/创建方法中调用myvalidate(),如果有错误则返回INPUT

答案 1 :(得分:3)

您还可以尝试使用您不希望验证的方法的@SkipValidation批注:

@SkipValidation
public String yourMethod(){
...
return SUCCESS;
}

答案 2 :(得分:0)

您可以通过在配置文件中添加排除项来排除其他方法。

<interceptor-ref name="validation">
  <param name="validateAnnotatedMethodOnly">true</param>                
  <param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>

答案 3 :(得分:0)

如果您使用Struts defaultStack拦截器,则您已经从名为input,back,cancel或browse的方法中排除了验证。

我建议创建自己的拦截器堆栈(所有操作都是默认的,因此您不必为每个操作重新定义这些内容)。将它基于适合您的struts-default.xml的示例堆栈,然后编辑interceptor-ref以进行验证和工作流(这些是密切相关的 - 工作流拦截器是跳过操作并返回“输入”的工作流拦截器如果存在验证错误,则执行操作 - 因此方法排除项应匹配)。

在我当前的项目中,我添加了* Form和* Input的例外,因此默认情况下启动验证,但很容易避免 - 只需确保您调用的操作方法以Form或Input结尾。

默认情况下运行验证通常会更好(并定义例外),因为如果您犯了错误并且在您不需要验证时运行验证,您将立即知道(由于错误,您的操作将无法执行) ..如果你犯了一个错误并验证没有运行,这是一个无声的失败。