1. 程式人生 > >struts框架問題六之從值棧中獲取值

struts框架問題六之從值棧中獲取值

  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>