【问题标题】:Validation of certain Action's methods in Struts2在 Struts2 中验证某些 Action 的方法
【发布时间】:2010-07-14 12:42:56
【问题描述】:

我有一个内部包含 CRUD 操作的 Action 类,并且我已经覆盖了 ActionSupport 类提供的 validate() 方法。

问题是:如何仅针对更新和创建操作触发验证?

一种可能的解决方案是将创建和更新移动到全新的 Action 类上,但我想知道是否有其他解决方案。

谢谢! 罗伯托

【问题讨论】:

    标签: java validation struts2


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

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

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

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

          【讨论】:

            猜你喜欢
            • 2016-07-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多