【问题标题】:Defining different validations based on the action method which is called in a Struts2 action根据 Struts2 动作中调用的动作方法定义不同的验证
【发布时间】:2013-08-02 13:29:55
【问题描述】:

我正在使用 Struts 2 创建一个 Web 应用程序。在一个 JSP 文件中,我创建了一个这样的表单:

<s:form action="actionclassname!%{methodToCall}" method="post">
...
</s:form> 

在动作类中,我创建了两个方法,它们将根据变量methodToCall 的值被调用。效果很好。 我的问题是动作类的两种方法需要一些验证。因此,如果调用第一个方法,我使用注释来验证表单:

@Validations(....) 
public String actionMethod1(){
    ...
}

@Validations(...) 
public String actionMehod2(){
    ...
}

第一种方法适用于验证。我的问题是第二种方法。似乎当我为第二种方法定义验证(也使用注释)时,我在第一种方法上定义的验证在我为第二种方法定义的验证之前再次执行。

当第二个方法被JSP调用时,如何验证第二个方法运行?

【问题讨论】:

  • 你确定要使用注解吗?我不确定这是否真的受支持,但我也倾向于不对此类内容使用注释,以使我的类尽可能保持中立。
  • 是的,我想继续使用注释。

标签: java forms validation struts2 annotations


【解决方案1】:

在通过注解的动作配置中,您应该使用参数validateAnnotatedMethodOnly 作为验证拦截器,如本例所示

@Action(value="actionclassname", results = {
  @Result(name="input", location = "/actionclassname.jsp")
},interceptorRefs = @InterceptorRef(value="defaultStack", params = {"validation.validateAnnotatedMethodOnly", "true"}))

【讨论】:

  • 我尝试了您的建议,但没有奏效。我没有使用默认堆栈。相反,我使用了我创建的那个。这对结果有影响吗?即使使用 defaultStack 它也不起作用。验证总是堆积如山。有什么其他建议吗?
  • @PatrickB。如果您没有发布代码,我怎么知道您使用的是哪个堆栈?并在方法上添加注释,用于映射您的操作。
  • 我没有责怪你我必须使用哪个堆栈。我将注释放在用于映射我的操作的方法上。它没有用。
  • 他还说它不适用于默认堆栈。省略一个细节并不会使它偏离主题,你知道它不会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多