验证拦截器中的exclude方法在struts2中不起作用

时间:2012-10-26 14:16:56

标签: java validation struts2 interceptor struts-validation

我是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>

1 个答案:

答案 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中的验证。