2010-07-14 52 views
1

我有一个Action类,里面有CRUD操作,我重写了ActionSupport类给出的validate()方法。在Struts2中验证某些Action的方法

现在的问题是:我如何才能对验证进行更新并创建操作?

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

谢谢! Roberto

回答

3

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

+0

,谢谢 – Roberto 2010-07-15 14:17:07

0

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

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

如果您使用拦截器的Struts defaultStack,则您已经从输入,返回,取消或浏览等方法中排除了验证。

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

在我当前的项目中,我在* Form和* Input的异常中添加了默认值,但很容易避免 - 只需确保您调用的操作方法以Form或Input结尾。

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

2

您也可以尝试与方法@SkipValidation注解你不想被验证:

@SkipValidation 
public String yourMethod(){ 
... 
return SUCCESS; 
} 
在我去了第二个选项结束