struts框架問題六之從值棧中獲取值
阿新 • • 發佈:2018-12-15
6. 問題六: 在JSP中獲取值棧的資料
* 總結幾個小問題:
> 訪問root中資料 不需要#
> 訪問context其它物件資料 加 #
> 如果向root中存入物件的話,優先使用push方法。
> 如果向root中存入集合的話,優先要使用set方法。
* 在OgnlContext中獲取資料
> 在Action中向域物件中存入值
> request:<s:property value="#request.username"/>
> session:<s:property value="#session.username"/>
> application:<s:property value="#application.username"/>
> attr:<s:property value="#attr.username"/>
> parameters:<s:property value="#parameters.cid"/>
6.1 程式碼如下
<!--
// vs.push("美美");這句程式碼在action中寫
// 獲取到棧頂的值
<s:property value="[0].top"/>這句程式碼在jsp中寫的。方括號裡面的值為從root棧中的第幾個位置開始讀,一直讀到最後。
-->
<!--
// 棧頂是map集合,通過key獲取值
vs.set("msg", "小鳳");
<s:property value="[0].top.msg"/>
-->
<!--
vs.push(user);
// 棧頂放user物件
<s:property value="[0].top.username"/>
<s:property value="[0].top.password"/>
// [0].top 關鍵字是可以省略的 findValue()
<s:property value="username"/>
-->
<!--
User user=new User();
user.setusername("zhangsan");
user.setpassword("123");
vs.set("user", user);
<s:property value="[0].top.user.username"/>
<s:property value="[0].top.user.password"/>
// 省略關鍵字,如果想要獲取的元素本來就是棧頂元素的時候,可以省略前面的[0].top
<s:property value="user.username"/>
-->
<!--
// 在ValueStack1Action提供了成員的屬性
private User user = new User("小澤","456");
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
User user = new User("小蒼","123");
vs.set("user", user);
// 從棧頂開始查詢,找user的屬性,顯示名稱 返回的小蒼
<s:property value="user.username"/>
// [1].top獲取ValueStack1Action [1].top.user返回user物件 [1].top.user.username獲取物件的屬性名稱
<s:property value="[1].top.user.username"/>
-->
<!--
棧頂是list集合
vs.push(ulist);
<s:property value="[0].top[0].username"/>
<s:property value="[0].top[1].username"/>
-->
<!--
vs.set("ulist", ulist);
<s:property value="ulist[0].username"/>
-->
<!-- 迭代的標籤
屬性
* value 要迭代的集合,需要從值棧中獲取
* var 迭代過程中,遍歷的物件
* var編寫上,把迭代產生的物件預設壓入到context棧中,從context棧取值,加#號
* var不編寫,預設把迭代產生的物件壓入到root棧中
for(User user:ulist){}
// 編寫var的屬性
<s:iterator value="ulist" var="u">
<s:property value="#u.username"/>加了#存到了context中
<s:property value="#u.password"/>
</s:iterator>
// 沒有編寫var關鍵字
<s:iterator value="ulist">
<s:property value="username"/>沒有加#存到了root中
<s:property value="password"/>
</s:iterator>
-->
<!-- 從context棧中獲取值,加#號
HttpServletRequest request = ServletActionContext.getRequest();向context中儲存值,就是向域中儲存值
request.setAttribute("msg", "美美");
request.getSession().setAttribute("msg", "小風");
<s:property value="#request.msg"/>
<s:property value="#session.msg"/>
<s:property value="#parameters.id"/>
<s:property value="#attr.msg"/>
-->
<!-- 在JSP頁面上,檢視值棧的內部結構 -->
<s:debug></s:debug>