首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

struts2加入拦截器后页面取不了值,该如何处理

2012-04-13 
struts2加入拦截器后页面取不了值base.HelloWorld.javaJava codepackage baseimport com.opensymphony.xw

struts2加入拦截器后页面取不了值
base.HelloWorld.java

Java code
package base;import com.opensymphony.xwork2.ActionSupport;import java.lang.Exception;public class HelloWorld extends ActionSupport {         public void validate(){        try{        if(getUsername().trim().equals("")||this.getUsername()==null){            System.out.println("validate");            this.addFieldError("username",getText("username"));        }        //if(getPassword()==null|| getPassword()=="")this.addFieldError("password",getText("password"));        }catch(Exception e){            e.printStackTrace();        }    }        public String execute(){        forwardMessage = "success";        return forwardMessage;    }        public String getPassword() {        return password;         }    public void setPassword(String password) {         this.password = password;        }     public String getUsername() {         return username;         }    public void setUsername(String username) {         this.username = username;         }        private String username;    private String password;     private String forwardMessage;    }


interceptors.ExampleInterceptor
Java code
package interceptors;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor;public class ExampleInterceptor implements Interceptor{    public void destroy() {        System.out.println("destroy");            }    public void init() {        System.out.println("init");    }    public String intercept(ActionInvocation invocate) throws Exception {        System.out.println("dobefore");        invocate.invoke();        System.out.println("doAfter");        return "success";    }    }


struts.xml
XML code
<!DOCTYPE struts PUBLIC        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"        "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>    <include file="struts-default.xml" />        <package name="base" extends="struts-default">        <interceptors>            <interceptor name="Example" class="interceptors.ExampleInterceptor"></interceptor>        </interceptors>                <action name="HelloWorld" class="base.HelloWorld" >            <result name="success">/HelloWorld.jsp</result>            <result name="input">/index.jsp</result>            <interceptor-ref name="Example"></interceptor-ref>        </action>    </package></struts>


index.jsp
HTML code
<%@ page language="java" contentType="text/html; charset=GBK"    pageEncoding="GBK"%><%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=GBK"><title>say hello</title></head><body>    <s:form action="HelloWorld" method="post">           <table>        Say Hello to :<s:textfield name="username" />        <s:submit/>           </table>    </s:form></body></html> 



Helloworld.jsp
HTML code
<%@ page language="java" contentType="text/html; charset=GBK"  pageEncoding="GBK"%> <%@ taglib prefix="s" uri="/struts-tags" %>  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  <html> <head>  <meta http-equiv="Content-Type" content="text/html; charset=GBK">   <title>Hello</title> </head>    <body>  hello, <s:property value="username"/>     </body> </html>


[解决办法]
<action name="HelloWorld" class="base.HelloWorld" >
<result name="success">/HelloWorld.jsp</result>
<result name="input">/index.jsp</result>
<interceptor-ref name="Example"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>

[解决办法]
<action name="HelloWorld" class="base.HelloWorld" >
<result name="success">/HelloWorld.jsp</result>
<result name="input">/index.jsp</result>
<interceptor-ref name="Example"></interceptor-ref> //注意这一行的作用
 </action>

在struts 2中如果没有指定拦截器的话,参数传递是靠默认的拦截器完成的,即继承了"struts-default"包下定义的“param”拦截器。

但是如果你在action元素中引用的一个自定义的拦截器的话,原来默认的拦截器栈就会不起作用。

解决方法:个人建议你再定义一个拦截器栈,把"struts-default"包下默认的拦截器和自定义的拦截器都放到此拦截器栈中。在action中引用些拦截器栈就可以了。
[解决办法]
Action中引用拦截器,必须手动加入默认拦截器。
<action name="HelloWorld" class="base.HelloWorld" > 
<result name="success">/HelloWorld.jsp </result> 
<result name="input">/index.jsp </result> 
<interceptor-ref name="Example"> </interceptor-ref> 
<interceptor-ref name="defaultStack"> </interceptor-ref> 
</action>

热点排行