我是struct 2.0的新手。我试图用拦截器运行我的第一个小应用程序,并希望仅使用验证方法。
但它在填充和执行方法之前调用验证函数。 谁能告诉我我错过了什么。
以下是我的SampleAction类。
package demo;
import com.opensymphony.xwork2.ActionSupport;
public class SampleAction extends ActionSupport {
private static final long serialVersionUID = 1L;
public void validate()
{
System.out.println("validate() method called");
}
public String populate()
{
System.out.println("populate() method called");
return "populate";
}
public String execute()
{
System.out.println("execute() method called");
return SUCCESS;
}
}
以下是我的struct.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="*Sample" method="{1}" class="demo.SampleAction">
<interceptor-ref name="defaultStack" >
<param name="validation.excludeMethods"> populate</param>
<result name="populate">/first.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
答案 0 :(得分:1)
将声明excludeMethods
参数的部分更改为:
<interceptor-ref name="defaultStack">
<param name="validation.excludeMethods">populate</param>
</interceptor-ref>
<强>更新强>
来自ValidationInterceptor
javadoc
alwaysInvokeValidate - 默认为true。如果为true,则始终会调用validate()方法,否则不会。
programmatic - 默认为true。如果为true且操作为Validateable,则调用validate(),以及以“validate”开头的任何方法。
声明 - 默认为true。根据xml或注释执行验证。
另请阅读Struts2 http://struts.apache.org/2.x/docs/validation.html中的验证。