struts2提供的一套from標簽使得數據的展示變得非常容易,想必這是它如此流行的原因之一,真的很方便。。
首先,為了能夠使用struts2提供的標簽,我們需要先添加標簽的引用
在JSP頁面上添加,uri的具體值可以在struts2包的META-INF的struts-tags.tld文件中查看
<%@taglib prefix="s" uri="/struts-tags"%>
先看一下最常用的
1 <s:property value="str" default="" escapeCsv="" escapeHtml="" escapeJavaScript="" escapeXml=""/>
和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>
一些其他的表單標簽
1 <s:textfield label="username" name="%{user.username}"/>
2 <s:checkboxlist name="name" label="多選框" list="#{'1':'Nick','2':'lily','3':'Mary' }" listKey="key" listValue="value" value="#{'1','2'}"/>
3 <s:radio label="Conutry" name="Conutry" value="2" list="#{'1':'中國','2':'美國','3':'俄羅斯' }" listKey="key" listValue="value"/>
4 <s:select list="users" label="姓名" value="1" listKey="id" listValue="username" headerKey="-1" headerValue="請選擇"/>
這些標簽雖然能很好的完成任務,但是不怎么靈活,一般來說前端的這些控件或多或少的都需要的添加自定義的樣式,所以這些標簽出現的機會比較少,只是簡單記錄一下。
還有很多其他的標簽,比如form等,HTML自帶標簽完全可以滿足一般需求。
這里特別提一下兩個工具類的標簽,其中格式化時間的date標簽用的比較頻繁,其次格式化數字的標簽number,可以用來截取數字長度,四舍五入等操作
1 <s:date name="time" format="yyyy-MM-dd"/>
2 <s:number name="money"/>