和EL表達(dá)式${str}的作用類似,展示動(dòng)態(tài)數(shù)據(jù),只不過(guò)property標(biāo)簽強(qiáng)化了很多功能,可以免去判斷直接設(shè)定默認(rèn)值,忽略cvs,html等內(nèi)容,雖然struts2的標(biāo)簽不支持EL表達(dá)式但是有一種類似的寫法
1 <s:property value="%{str}"/>
其次是流程控制標(biāo)簽
1 <s:if test="condition != null">
2 <!--你的代碼-->
3 </s:if>
test的內(nèi)容可以使用OGNL表達(dá)式獲取,除了Java那些常規(guī)的判斷寫法,可以將&&可以寫作and,||可以寫作or,和JSTL的判斷類似,都有自己的個(gè)性
之后是迭代標(biāo)簽,迭代標(biāo)簽可以說(shuō)是struts2標(biāo)簽中最常用的標(biāo)簽之一,不僅是因?yàn)榱斜砉δ芎艹R?jiàn),而且迭代標(biāo)簽給出了很好用的功能
假定vals是個(gè)list,那么遍歷這個(gè)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屬性可以靈活的設(shè)定遍歷的區(qū)間,step則是步進(jìn)的長(zhǎng)度,但是step必須在指定了begin之后才生效,特別要說(shuō)明status這個(gè)屬性,聲明了st之后,便可以獲得當(dāng)前遍歷的下標(biāo)或者行號(hào),這樣一來(lái)就可以根據(jù)需求執(zhí)行其他的操作。var屬性則聲明了當(dāng)前的遍歷對(duì)象,使用var屬性之后,會(huì)在ValueStack中的root和ActionContext中各生成一份當(dāng)前對(duì)象,所以也可以寫為
<s:property value="#val"/>,如果不聲明var屬性,則只會(huì)在root中生成一份當(dāng)前對(duì)象,是否聲明var屬性,取決于當(dāng)前遍歷的元素類型,比如vals是一個(gè)user列表,那么迭代標(biāo)簽會(huì)把當(dāng)前迭代的user對(duì)象置于棧頂,循環(huán)內(nèi)直接寫
<s:property value="name"/>就可以獲取user的name值,無(wú)需聲明var屬性。
假定vals是個(gè)map,那么遍歷這個(gè)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>
一些其他的表單標(biāo)簽