1. property: <s:property value="username"/>
2. property 取值為字符串: <s:property value="'username'"/>
3. property 設定默認值: <s:property value="admin" default="管理員"/>
4. property 設定HTML: <s:property value="'<hr/>'" escape="true"/> 輸出 <hr/>
5. set 設定adminName值(默認為request 和 ActionContext): <s:set var="adminName" value="username" />
set 從request取值: <s:property value="#request.adminName" />
set 從ActionContext取值: <s:property value="#adminName" />
set 設定范圍: <s:set var="adminPassword" value="password" scope="session"/>
set 從相應范圍取值: <s:property value="#session.adminPassword"/>
說明:set 在以前的版本中有name id,但是在2.1版本開始不推薦使用,用var代替.實際var表示把變量壓入棧actioncontext. 官方這樣說明var的:Name used to reference the value pushed into the Value Stack;
這樣我們可以用#key來訪問.
6. bean標簽
<s:bean name="com.awf.tags.Dog" var="mydog">
<s:param name="name" value="'pp'"></s:param>
<s:property value="name"/>
</s:bean>
說明:注意到pp用單引號,因為這時要真正用到String,如果沒有加單引號,struts2會默認用OGNL到ValueStack找值.
對于為什么可以<s:property value="name"/>(取到pp)這樣取值,可以做個小實驗在set標簽里加入<s:debug/>,這樣你可能看到整個棧數 據的出入,此時棧頂當然是mydog對象,這個標簽執行完后就可以出棧了,這時action又保持在棧頂了.
此時mydog被存入到actioncontext棧中,所以要取值要用到#號了.
取值:<s:property value="#mydog.name/>
7. include標簽
<s:include value="/index.html"></s:include>
這里value的默認處理方式是要內容當做String,不是OGNL,如果這時要用OGNL可以用%,這就是%的實際意義了,其實上面所講的標簽 也可以使用%,OGNL對于那些默認使用OGNL的標簽會忽略%號,真搞不懂為什么全部都統一,這樣我們就不用記這么多了^^,下面是具體使用方法:
<s:set var="incPage" value="%{'/index.html'}" />
<s:include value="%{#incPage}"></s:include>
現在回到include標簽,這個標簽真的不好用對中文的支持不好,可能有BUG,所以還是用jsp自帶的動態包含/靜態包含.
8. if elseif else標簽
定義變量 num= <s:set var="num" value="'100'"/> set定義的變量存在ActionContext棧中
<s:if test="#num< 0"> 小于0 </s:if>
<s:elseif test="#num <50"> 小于50 </s:elseif>
<s:else>大于50</s:else>
<s:if test="#parameters.aaa == null">null</s:if>
這里說到#parameters不得不提一下,我們在地址欄輸入的變量會存在ActionContext棧中,如xx/sdfds.jsp?name=1
這樣我們可能用OGNL這樣取值#parameters.name ,注意這里取出來的是一個集合,如果你這樣訪問xx/sdfds.jsp?name=1&name=2,你可以發現可以取出兩個值.因為這樣所以在寫程序時我樣最好精確定位像這樣#parameters.name[0],就算你能保證只能一個值,也要這樣.
9. iterator標簽,遍歷集合
<s:iterator value="{1, 2, 3}" >
<s:property/>
</s:iterator>
自定義變量:
<s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">
<s:property value="#x.toUpperCase()"/> |
</s:iterator>
<s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
<s:property/> |
遍歷過的元素總數:<s:property value="#status.count"/> |
遍歷過的元素索引:<s:property value="#status.index"/> |
當前是偶數?:<s:property value="#status.even"/> |
當前是奇數?:<s:property value="#status.odd"/> |
是第一個元素嗎?:<s:property value="#status.first"/> |
是最后一個元素嗎?:<s:property value="#status.last"/>
<br />
</s:iterator>
說明:偶數和其數不是下標,下標0其實是第一個當然是奇數了.
遍歷map:
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
<s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
</s:iterator>