0

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

1 回答 1

2

将您声明excludeMethods参数的部分更改为:

<interceptor-ref name="defaultStack">
    <param name="validation.excludeMethods">populate</param>
</interceptor-ref>

更新

来自ValidationInterceptorjavadoc

alwaysInvokeValidate - 默认为 true。如果为真 validate() 方法将始终被调用,否则不会。

程序化 - 默认为 true。如果为 true 并且操作是 Validateable,则调用 validate() 以及任何以“validate”开头的方法。

声明性 - 默认为 true。基于 xml 或注释执行验证。

另请阅读 Struts2 http://struts.apache.org/2.x/docs/validation.html中的验证。

于 2012-10-26T14:37:18.147 回答