和EL表達式${str}的作用類似,展示動態數據,只不過property標簽強化了很多功能,可以免去判斷直接設定默認值,忽略cvs,html等內容,雖然struts2的標簽不支持EL表達式但是有一種類似的寫法
1 <s:property value="%{str}"/>
其次是流程控制標簽
1 <s:if test="condition != null">
2 <!--你的代碼-->
3 </s:if>
test的內容可以使用OGNL表達式獲取,除了Java那些常規的判斷寫法,可以將&&可以寫作and,||可以寫作or,和JSTL的判斷類似,都有自己的個性
之后是迭代標簽,迭代標簽可以說是struts2標簽中最常用的標簽之一,不僅是因為列表功能很常見,而且迭代標簽給出了很好用的功能
假定vals是個list,那么遍歷這個list
1 <s:iterator value="vals" var="val" begin="0" end="5" status="st" step="2">
2 <s:property value="val"/>-<s:property value="#st.index"/>-<s:property value="#st.count"/><br>
3 </s:iterator>
begin和end屬性可以靈活的設定遍歷的區間,step則是步進的長度,但是step必須在指定了begin之后才生效,特別要說明status這個屬性,聲明了st之后,便可以獲得當前遍歷的下標或者行號,這樣一來就可以根據需求執行其他的操作。var屬性則聲明了當前的遍歷對象,使用var屬性之后,會在ValueStack中的root和ActionContext中各生成一份當前對象,所以也可以寫為
<s:property value="#val"/>,如果不聲明var屬性,則只會在root中生成一份當前對象,是否聲明var屬性,取決于當前遍歷的元素類型,比如vals是一個user列表,那么迭代標簽會把當前迭代的user對象置于棧頂,循環內直接寫
<s:property value="name"/>就可以獲取user的name值,無需聲明var屬性。
假定vals是個map,那么遍歷這個map
1 <s:iterator value="mapVals" var="val" begin="0" end="5" status="st" step="2">
2 <s:property value="mapVals.get(#val.getKey())"/>-<s:property value="#st.index"/>-<s:property value="#st.count"/><br>
3 </s:iterator>
或者寫為
1 <s:iterator value="mapVals.keySet()" var="keyId" begin="0" end="5" status="st" step="2">
2 <s:property value="mapVals.get(#keyId)"/>-<s:property value="#st.index"/>-<s:property value="#st.count"/><br>
3 </s:iterator>
一些其他的表單標簽