【问题标题】:Validate method for a specific action mapping验证特定操作映射的方法
【发布时间】:2012-09-07 06:51:02
【问题描述】:

我的 struts 2 xml 文件中有 2 个动作映射,它们映射到以下相同动作类的 2 个方法

<action name="action1" class="com.web.action.MyAction method="myMethod1">
            <result>success1.jsp</result>
</action>
<action name="action2" class="com.web.action.MyAction method="myMethod2">
            <result>success2.jsp</result>
</action>

我还覆盖了 ActionSupport 类的 validate() 方法。现在我希望这个验证方法应该只对action1执行,而不是对action2执行。有没有办法这样做?我知道我可以将这两种方法放在单独的动作类中,这将起作用。

【问题讨论】:

    标签: validation struts2


    【解决方案1】:

    “验证”拦截器使用与“准备”拦截器相同的前缀方法实用程序。

    “验证”拦截器将调用特定方法的验证方法;对于您的具体示例:

    public void validateMyMethod1() { ... }
    public void validateMyMethod2() { ... }
    

    请参阅"validation" interceptor docs,但要了解更好/更详细的信息,请参阅"prepare" interceptor docs

    【讨论】:

      【解决方案2】:

      到目前为止,这不可能直接告诉我们应该在哪个动作调用中调用 validate 方法,几乎​​没有可能的解决方案

      1. 按照您的建议将它们移动到单独的类中。
      2. 切换到编程验证方法,例如创建一个相同的方法myCustomvalidation,您可以从myMethod1 方法内部调用该方法。

      【讨论】:

      • 是的,切换到自定义验证意味着您可以控制流程和其他方面
      • 我喜欢你的第二个解决方案。我可以在 myCustomValidation 中做这样的事情吗: public String myMethod1() { if(!myCustomValidation) { return INPUT; } //执行动作任务 return SUCCESS; } public boolean myCustomValidation() { //如果无效 addFieldError("myField","field not valid");返回假; //否则返回真; }
      • 好的,只是为了确认一下,如果我添加一个字段错误并从我的 customValidate() 方法返回 INPUT,这将与我从 validate() 方法添加字段错误的方式相同吗?我的意思是验证错误将显示对应的字段?
      • 是的,因为 fieldError 将在 valuestack 上可用,而且你可以尝试看看它是怎么回事
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多