1. 程式人生 > 其它 >Struts2如何傳值到jsp頁面

Struts2如何傳值到jsp頁面

技術標籤:javaStruts2pageScoperequestScopesessionScopeapplication

一、一般是在Action中定義一個成員變數,然後對這個成員變數提供get/set方法,在JSP頁面就可以取到這個變數的值了。

1)在Action中定義成員變數

//定義一個成員變數
privateStringmessage;

//提供get/set方法
publicStringgetMessage(){
returnmessage;
}
publicvoidsetMessage(Stringmessage){
this.message=message;
}

  2)在JSP頁面中取值

${message}

2、但是定義的成員變數多了,感覺整個Action的程式碼就很長了。這個時候可以使用一些ServletAPI進行值的存取操作:HttpServletRequest、HttpSession和ServletContext。Struts2對這個三個物件用Map進行了封裝,我們就可以使用Map物件來存取資料了。

  1)在Action中存值

package cn.com.action;
public class testAction extends ActionSupport {

privateStringmessage;
publicStringgetMessage(){
returnmessage;
}
publicvoidsetMessage(Stringmessage){
this.message=message;
}

	 
	public String getDataSourceStat() {
		ActionContext actionContext = ActionContext.getContext();// ValueStack可以使用requestScope
		Map<String, Object> session = ActionContext.getContext().getSession();// 對應sessionScope
		Map<String, Object> application = ActionContext.getContext().getApplication();// 對應applicationScope
		actionContext.put("b", "123");
		session.put("c", "456");
		application.put("d", "789");		
		return SUCCESS;
	}
	
}

    2)在xml配置檔案

<struts>
	<package name="test" extends="struts-default">
 
		<action name="getDataSourceStat" class="cn.com.action.testAction" method="getDataSourceStat">
			<!-- <result name="success">/index.jsp</result> -->
			<result name="success">/test/jsp/datasource.jsp</result>
		</action>
	</package>
</struts>

3)在JSP頁面上取值

<body>
	<%
		//從小到大的4個容器
		pageContext.setAttribute("aa", "aaa");//${pageScope.aa }
		request.setAttribute("bb", "bbb");//${requestScope.bb }
		session.setAttribute("cc", "ccc");//${sessionScope.cc }
		application.setAttribute("dd", "ddd");//${applicationScope.dd }
	%>
    <%= request.getAttribute("b")%>
	<br> ${a} <!-- 取值順序pageScope->requestScope->sessionScope->applicationScope -->
	<br> ${b} <!-- 取值順序pageScope->requestScope->sessionScope->applicationScope -->
	<br> ${c} <!-- 取值順序pageScope->requestScope->sessionScope->applicationScope -->
	<br> ${d} <!-- 取值順序pageScope->requestScope->sessionScope->applicationScope -->
	<br> ${pageScope.aa }
	<br> ${requestScope.b }
	<br> ${sessionScope.c }
	<br> ${applicationScope.d }
	<br>
</body>	

web標準的存放資料的範圍有:

pageContext域,request域,session域,application域(ServletContext)。

struts2自己又定義了一個容器來存放資料,即:ActionContext。

ActionContext是個Map集合,它持有了web標準的4個域,通過它可以直接獲取這四個標準容器。

不僅如此,它還引用了其它struts2自己定義的物件:

jsp的4個作用域 pageScope、requestScope、sessionScope、applicationScope的區別

1、區別:

1.page指當前頁面有效。在一個jsp頁面裡有效

2.request指在一次請求的全過程中有效,即從http請求到伺服器處理結束,返回響應的整個過程,存放在HttpServletRequest物件中。在這個過程中可以使用forward方式跳轉多個jsp。在這些頁面裡你都可以使用這個變數。

3.Session是使用者全域性變數,在整個會話期間都有效。只要頁面不關閉就一直有效(或者直到使用者一直未活動導致會話過期,預設session過期時間為30分鐘,或呼叫HttpSession的invalidate()方法)。存放在HttpSession物件中

4.application是程式全域性變數,對每個使用者每個頁面都有效。存放在ServletContext物件中。它的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用

總結:當資料只需要在下一個forward有用時,用request就夠了;
若資料不只是在下一個forward有用時,就用session。
上下文,環境資訊之類的,用application。