解決方法|struts2執行action前加入攔截器,導致獲取不到引數
阿新 • • 發佈:2019-02-11
今天學到使用ONGL表示式實現型別轉換
雖然我還是不懂ONGL表示式是啥,但抱著“先get書本例子的方法再慢慢深入學習”的想法還是跟著書本敲程式碼
結果!在結果頁面裡怎麼也獲取不到輸入的引數!
經過百度後發現,是因為我使用了自定義的攔截器,
如果在配置檔案中加入了自定義的攔截器,那預設的攔截器就不會起作用,在Action中就不能取得表單的引數這個時候,就需要顯式地呼叫預設的攔截器defaultStack(注意順序,先呼叫預設的攔截器)下面是我的程式碼:
輸入引數的jsp:
<s:form action="load" method="post" name="myform"> <s:textfield label="使用者名稱" name="user.uname"/><br/> <s:textfield label="年齡" name="user.uyear"/><br/> <s:textfield label="性別" name="user.usex"/><br/> <s:submit value="確認"></s:submit> </s:form>
action:
package simon; import com.opensymphony.xwork2.ActionSupport; import simon.userBean; public class action extends ActionSupport{ private userBean user; public userBean getUser() { return user; } public void setUser(userBean user) { this.user = user; } public String execute() { return "success"; } }
struts.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <constant name="struts.devMode" value="true" /> <package name="nothing" extends="struts-default"> <interceptors> <interceptor name="inn" class="simon.Person" /> </interceptors> <action name="load" class="simon.action"> <result name="success">/success.jsp</result> <interceptor-ref name="defaultStack"/> <!--注意順序,先呼叫預設的攔截器--> <interceptor-ref name="inn"></interceptor-ref> </action> </package> </struts>
結果jsp:
你輸入的內容如下:<br/>
姓名:<s:property value="user.uname" /><br/>
年齡:<s:property value="user.uyear" /><br/>
性別:<s:property value="user.usex" />
“Struts2中很多的功能是用攔截器實現的,比如:取得表單引數,檔案上傳,異常處理等
Struts2會預設呼叫預設的攔截器,預設攔截器配置在struts-default.xml中可以檢視
如果在配置檔案中加入了自定義的攔截器,那預設的攔截器就不會起作用,在Action中就不能取得表單的引數”