最近學習 Struts 2.1 Tags 做了些筆記,貼出來大家一起學習下,希望大家多多交流。
別的都不說了,我就貼代碼,代碼裏註釋比較詳細,呵呵。
文件目錄,如下:
index.jsp 代碼
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%@page import="com.rao.bean.Sex"%>
- <%@ taglib prefix="s" uri="/struts-tags"%>
- <%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>My page</title>
- <s:head theme="xhtml"/>
- <sx:head parseContent="true"/>
- </head>
- <body>
- Struts 2.1 Tags
- <br/>
- <br/>
- 一、控制標籤<br/><hr size="3" color="red">
- #、if /elseif/ else @用於邏輯判斷<br/>
- <s:set name="bir" value="-12"></s:set>
- <s:if test="#bir>=180 || #bir<0">
- 你是何方妖怪?
- </s:if>
- <s:elseif test="#bir<=18 && #bir>=0">
- 未成年人不能進入!
- </s:elseif>
- <s:elseif test="#bir<=60 && #bir>=18">
- 您已經成年!
- </s:elseif>
- <s:else>
- 您已經老了!
- </s:else>
- <br/>--------------------------------------------------------------<br/>
- #、append @用於將多個集合合併<br/>
- <s:set name="appList1" value="{'111','222','333','444'}"></s:set>
- <s:set name="appList2" value="{'aaa','bbb','ccc','ddd'}"></s:set>
- <s:append var="newAppList">
- <s:param value="appList1"></s:param>
- <s:param value="appList2"></s:param>
- </s:append>
- <s:iterator value="#newAppList">
- <s:property/> |
- </s:iterator>
- <br/>--------------------------------------------------------------<br/>
- #、generator <br/>
- generator標籤,該標籤可以將指定字符串按指定分隔符分割成多個字串。生成的多個字串可以用iterator標籤進行迭代輸出。可以這麼理解:generator標籤將一個字符串轉換成一個List集合。在該標籤體內,整個臨時生成的集合將爲Valuestack的頂端,但一旦該標籤結束,生成的集合將被移除Valuestack。generator標籤有如下幾個屬性:
- <br/>
- 1、count屬性:指定生成集合中元素的總數。可選屬性。<br/>
- 2、val屬性:必填屬性,指定被解析的字符串。<br/>
- 3、separator屬性:這是一個必填屬性,指定用於分割字符串的分隔符。<br/>
- 4、converter屬性:可選屬性,指定一個轉換器,轉換器負責將生成的集合中的每個字符串轉換成對象,通過這個轉換器可以將一個含有分隔符的字符串解析成對象的集合。轉換器必須一個繼承org.apache.struts2.util.IteratorGenerator.Converter的對象。
- <br/>
- 5、var屬性,可選屬性。如果指定了該屬性,則將生成的集合保存在Stack Context中。如果不指定該屬性,則將生成的集合放入ValueStack的頂端,該標籤一結束,生成的集合就被移除。該屬性也可替換成id。
- <br/>
- <s:generator val="'aaa,bbb,ccc,ddd'" separator="," count="2">
- <s:iterator>
- <s:property/>
- </s:iterator>
- </s:generator><br/>
- <br/>--------------------------------------------------------------<br/>
- #、iterator 用於迭代數據<br/>
- <s:set name="iterList" value="{'aaa','bbb','ccc','ddd'}"></s:set>
- <table border="1">
- <tr>
- <td> 索引 </td>
- <td> 值 </td>
- <td> 奇? </td>
- <td> 偶? </td>
- <td> 首? </td>
- <td> 尾? </td>
- <td> 當前迭代數量 </td>
- </tr>
- <s:iterator value="{'aaa','bbb','ccc','ddd','eee','fff'}" begin="1" status="s">
- <tr bgcolor="<s:if test="#s.odd">pink</s:if>">
- <td><s:property value="#s.index"/></td>
- <td><s:property/></td>
- <td><s:property value="#s.even"/></td>
- <td><s:property value="#s.odd"/></td>
- <td><s:property value="#s.first"/></td>
- <td><s:property value="#s.last"/></td>
- <td><s:property value="#s.count"/></td>
- </tr>
- </s:iterator>
- </table>
- <br/>--------------------------------------------------------------<br/>
- #、merge @和類似:用於將多個集合合併<br/>
- <s:set name="merList1" value="{'111','222','333','444'}"></s:set>
- <s:set name="merList2" value="{'aaa','bbb','ccc','ddd'}"></s:set>
- <s:append var="newMerList">
- <s:param value="merList1"></s:param>
- <s:param value="merList2"></s:param>
- </s:append>
- <s:iterator value="#newMerList">
- <s:property/> |
- </s:iterator>
- <br/>--------------------------------------------------------------<br/>
- #、sort @用於排序<br/>
- <s:bean var="myComparator" name="com.rao.comparator.MyComparator"></s:bean>
- <s:sort comparator="#myComparator" source="{1,45,56,0,345,3}">
- <s:iterator>
- <s:property/>,
- </s:iterator>
- </s:sort>
- <br/>--------------------------------------------------------------<br/>
- #、subset @用戶截取集合中的子集; 注:decider:可選屬性,指定由開發者自己決定是否選中該元素.
- <br/>
- <s:set name="subList" value="{'@@@','***','&&&','###'}"></s:set>
- <s:subset source="#subList" start="1" count="2">
- <s:iterator>
- <s:property/>,
- </s:iterator>
- </s:subset>
- <br/>--------------------------------------------------------------<br/>
- 二、數據標籤<br/>
- <hr size="3" color="red">
- #、action @用於導入一個Action<br/>
- 使用action標籤,可以允許在jsp頁面中直接調用Action,在調用Action時候,可以指定需要被調用的Action的name和namespace.如果指定了executeResult參數的屬性值爲true,該標籤會把Action的處理結果(視圖資源)包含到本頁面中. 使用action標籤指定屬性有:
- <br/>
- id: 可選屬性,作爲該Action的引用ID <br/>
- name:必選屬性,指定調用Action <br/>
- namespace:可選屬性,指定該標籤調用Action所屬namespace <br/>
- executeResult:可選屬性,指定是否將Action的處理結果包含到本頁面中.默認值爲false,不包含. <br/>
- ignoreContextParam:可選參數,指定該頁面的請求參數是否需要傳入調用的Action中,默認值是false,即傳入參數.<br/>
- s:param是以request方式的值的,而不是以參數傳值,所以request.getParameter("")會獲取不到值,通過request.getAttribute("")方式可以獲取<br/>
- <s:action name="tagsAction1" ignoreContextParams="true" executeResult="true" namespace="/com/rao">
- <s:param name="userName" value="'三毛'"></s:param>
- </s:action>
- <br/>--------------------------------------------------------------<br/>
- #、bean @用於導入一個javaBean,相當於:jsp:useBean 標籤<br/>
- <s:bean name="com.rao.bean.UserBean" var="user">
- <s:param name="userId" value="1001"></s:param>
- <s:param name="userName" value="'張三'"></s:param>
- </s:bean>
- userId:<s:property value="#user.userId"/><br>
- userName:<s:property value="#user.userName"/>
- <br/>--------------------------------------------------------------<br/>
- #、date @用於格式化日期<br/>
- <s:set name="dt" value="new java.util.Date()"></s:set>
- 當期系統時間是:<s:date name="dt" format="yyyy-MM-dd HH:ss:mm"/>
- <br/>--------------------------------------------------------------<br/>
- #、debug @用於調試程序,讓開發人員一目瞭然的知道當前請求、值棧、棧中的各項參數<br/>
- <s:debug/>
- <br/>--------------------------------------------------------------<br/>
- #、i18n @用於訪問國際化資源文件的內容<br/>
- 1.默認訪問全局範圍內的資源文件;
- <br>
- <s:text name="welcome">
- <s:param>三毛</s:param>
- <s:param>學習</s:param>
- </s:text>
- <hr>
- 2.訪問包範圍內的資源文件;
- <br>
- <s:i18n name="com/rao/action/package">
- <s:text name="welcome">
- <s:param>三毛</s:param>
- <s:param>學習</s:param>
- </s:text>
- </s:i18n>
- <hr>
- 3.訪問Action範圍內的資源文件;
- <br>
- <s:i18n name="com/rao/action/GlobalNativeAction">
- <s:text name="welcome">
- <s:param>三毛</s:param>
- <s:param>學習</s:param>
- </s:text>
- </s:i18n>
- <br/>--------------------------------------------------------------<br/>
- #、include @用於導入一個jsp文件,等同於:jsp:include標籤<br/>
- <s:include value="success.jsp"></s:include>
- <br/>--------------------------------------------------------------<br/>
- #、param @用於給指定參數設置值<br/>
- <s:bean name="com.rao.bean.UserBean" var="user">
- <s:param name="userId" value="1001"></s:param>
- <s:param name="userName" value="'張三'"></s:param>
- </s:bean>
- userId:<s:property value="#user.userId"/><br>
- userName:<s:property value="#user.userName"/>
- <br/>--------------------------------------------------------------<br/>
- #、property @輸出結果,很像EL表達式,但是可以依託於OGNL錶帶是很強大<br/>
- 同上
- <br/>--------------------------------------------------------------<br/>
- #、push @該標籤可以把程序員在ActionContext中引用的對像壓入valuestack中,爲以後訪問對象提供了方便<br/>
- <s:push value="#request.user"><s:property value="userName"/></s:push>
- <br/>--------------------------------------------------------------<br/>
- #、set @用戶聲明對象或屬性<br/>
- <s:set name="uName" value="#request.user.userName"></s:set>
- <s:property value="#uName"/>,你好啊!
- <br/>--------------------------------------------------------------<br/>
- #、text @用戶獲取國際化資源文件的內容<br/>
- 請參考 il8n標籤
- <br/>--------------------------------------------------------------<br/>
- #、url @用於組拼一個請求路徑<br/>
- <s:url var="url1" action="MyAction" method="add">
- <s:param name="id" value="%{23}"></s:param>
- <s:param name="name" value="%{'tom'}"></s:param>
- </s:url>
- <s:property value="#url1"/>
- <br/>
- 注意:<br/>
- <s:set name="myurl" value="'http://www.baidu.com'"></s:set>
- value以字符處理: <s:url value="#myurl"></s:url><br>
- value明確指定以ognl表達式處理: <s:url value="%{#myurl}"></s:url>
- <br/>--------------------------------------------------------------<br/>
- 三、UI標籤<br/>
- <hr size="3" color="red">
- <s:form>
- #、checkboxlist @複選框列表<br>
- 1> .list 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
- name:checkboxlist的名字<br>
- list:checkboxlist要顯示的列表<br>
- value:checkboxlist默認被選中的選項,checked=checked<br>
- <s:checkboxlist theme="simple" name="checkbox1" list="{'上網','看書','爬山','游泳','唱歌'}" value="{'上網','看書'}" ></s:checkboxlist>
- <br>
- 2> .Map 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
- name:checkboxlist的名字<br>
- list:checkboxlist要顯示的列表<br>
- listKey:checkbox 的value的值<br>
- listValue:checkbox 的lablel(顯示的值)<br>
- value:checkboxlist默認被選中的選項,checked=checked<br>
- <s:checkboxlist theme="simple" name="checkbox2" list="#{1:'上網',2:'看書',3:'爬山',4:'游泳',5:'唱歌'}" listKey="key" listValue="value" value="{1,2,5}" ></s:checkboxlist>
- <br/>--------------------------------------------------------------<br/>
- #、combobox <br/>
- <s:combobox theme="simple" label="選擇你喜歡的顏色" name="colorNames" headerValue="------請選擇------" headerKey="1" list="{'紅','橙','黃','綠','青','藍','紫'}" />
- <br/>--------------------------------------------------------------<br/>
- #、radio @單選框<br/>
- <%
- Sex sex1 = new Sex(1,"男");
- Sex sex2 = new Sex(2,"女");
- List<Sex> list = new ArrayList<Sex>();
- list.add(sex1);
- list.add(sex2);
- request.setAttribute("sexs",list);
- %>
- 這個與checkboxlist差不多;<br>
- 1>.如果集合爲javabean:<s:radio theme="simple" name="sex" list="#request.sexs" listKey="id" listValue="name"></s:radio><br>
- 2>.如果集合爲list:<s:radio theme="simple" name="sexList" list="{'男','女'}"></s:radio><br>
- 3>.如果集合爲map:<s:radio theme="simple" name="sexMap" list="#{1:'男',2:'女'}" listKey="key" listValue="value"></s:radio><br>
- <hr>
- <br/>--------------------------------------------------------------<br/>
- #、select @下拉列表框<br/>
- 這個與s:checkboxlist差不多;<br>
- 1>.如果集合爲javabean:<s:select theme="simple" name="sex" list="#request.sexs" listKey="id" listValue="name"></s:select><br>
- 2>.如果集合爲list:<s:select theme="simple" name="sexList" list="{'男','女'}"></s:select><br>
- 3>.如果集合爲map:<s:select theme="simple" name="sexMap" list="#{1:'男',2:'女'}" listKey="key" listValue="value"></s:select><br>
- <br/>--------------------------------------------------------------<br/>
- #、doubleselect @級聯菜單 <br/>
- <!-- 可以用直接指定,當然也可以跟數據庫綁定的 -->
- <s:set name="proviList" value="{'江西省','湖北省'}"></s:set>
- <s:set name="jxList" value="{'南昌市','贛州市','九江市','上饒市','鷹潭市'}"></s:set>
- <s:set name="hbList" value="{'武漢市','恩施市','十堰市','荊州市','襄樊市'}"></s:set>
- <s:doubleselect theme="simple" name="provi" doubleList="top=='江西省' ? #jxList : #hbList" list="#proviList" doubleName="city"></s:doubleselect>
- <br/>--------------------------------------------------------------<br/>
- #、optiontransferselect <br/>
- <s:optiontransferselect theme="simple" label="change" name="abc" doubleList="{'111','222','333','444'}" list="{'aaa','bbb','ccc','ddd'}" doubleName="number"></s:optiontransferselect>
- <br/>--------------------------------------------------------------<br/>
- #、updownselect @可上下選擇的select <br/>
- <s:updownselect label="selectCity" emptyOption="true" name="selectCity" list="#jxList" headerValue="-Please Select The City-" headerKey="-1"></s:updownselect>
- <br/>--------------------------------------------------------------<br/>
- #、sx:datetimepicker @日期選擇控件 <br/>
- 使用步驟:聲明:我這裏用的是strut 2.1.8.1,在struts2.0的版本中可能有所不同;<br/>
- 1.導入struts2-dojo-plugin-2.1.8.1.jar DoJo 插件包;<br/>
- 2. 導入標籤:<%--@ taglib prefix="sx" uri="/struts-dojo-tags"--%>;<br/>
- 3.在需要使用的頁面中的head標籤之間加上<%-- <sx:head parseContent="true"/> --%>;<br/>
- <sx:datetimepicker label="birthday" name="bir" value="#dt"></sx:datetimepicker>
- <br/>--------------------------------------------------------------<br/>
- #、sx:tabbedpanel @選項卡控件 <br/>
- 聲明:這個標籤代碼轉至:http://blog.sina.com.cn/s/blog_6145ed810100ecud.html,版權歸作者所有;寫的挺好拿來大家共同學習。
- <!-- tabbedpanel標籤 -->
- <!-- 最簡單的選項卡,兩個選項卡加載都是本頁面 -->
- <hr color="blue">
- <b>最簡單的選項卡:</b>
- <br>
- <sx:tabbedpanel id="tab1" beforeSelectTabNotifyTopics="/beforeSelect">
- <sx:div label="Tab 1" >
- Local Tab 1
- </sx:div>
- <sx:div label="Tab 2" >
- Local Tab 2
- </sx:div>
- </sx:tabbedpanel>
- <!-- 加載其他頁面的選項卡 -->
- <hr color="blue">
- <b>加載其他頁面的選項卡:</b>
- <br>
- <sx:tabbedpanel id="tab2">
- <sx:div label="Remote Tab 1" href="upload.jsp">
- Remote Tab 1
- </sx:div>
- <sx:div label="Remote Tab 2" href="multipleUpload.jsp" >
- Remote Tab 1
- </sx:div>
- </sx:tabbedpanel>
- <!-- 設置選項卡底下的內容懶加載,即等需要的時候再加載,使用屬性preload="false"-->
- <hr color="blue">
- <b>設置選項卡底下的內容懶加載,即等需要的時候再加載,使用屬性preload="false":</b>
- <br>
- <sx:tabbedpanel id="tab3">
- <sx:div label="Remote Tab 1" href="upload.jsp">
- Remote Tab 1
- </sx:div>
- <sx:div label="Remote Tab 2" href="multipleUpload.jsp" preload="false">
- Remote Tab 1
- </sx:div>
- </sx:tabbedpanel>
- <!-- 固定大小的選項卡 -->
- <hr color="blue">
- <b>固定大小的選項卡,使用屬性cssStyle和doLayout:</b>
- <br>
- <sx:tabbedpanel cssStyle="width: 200px; height: 100px;" doLayout="true" id="tab4">
- <sx:div label="Tab 1" >
- Local Tab 1
- </sx:div>
- <sx:div label="Tab 2" >
- Local Tab 2
- </sx:div>
- </sx:tabbedpanel>
- <!-- 每次點擊選項卡時都重新刷新內容 -->
- <hr color="blue">
- <b>每次點擊選項卡時都重新刷新內容,使用屬性refreshOnShow:</b>
- <br>
- <sx:tabbedpanel id="tab5">
- <sx:div label="Remote Tab 1" href="upload.jsp" refreshOnShow="true">
- Remote Tab 1
- </sx:div>
- <sx:div label="Remote Tab 2" href="multipleUpload.jsp" refreshOnShow="true">
- Remote Tab 2
- </sx:div>
- </sx:tabbedpanel>
- <!-- 使得其中一個選項卡失效 -->
- <hr color="blue">
- <b>使得其中一個選項卡失效:</b>
- <br>
- <sx:tabbedpanel id="tab6">
- <sx:div label="Tab 1" >
- Local Tab 1
- </sx:div>
- <sx:div label="Tab 2" disabled="true">
- Local Tab 2
- </sx:div>
- </sx:tabbedpanel>
- <!-- 設置選項卡在底部顯示 (可以是: top, right, bottom, left) -->
- <hr color="blue">
- <b>設置選項卡在底部顯示 (可以是: top, right, bottom, left):</b>
- <br>
- <sx:tabbedpanel id="tab7" labelposition="bottom" cssStyle="width:200px;height:100px;" doLayout="true">
- <sx:div label="Tab 1" >
- Local Tab 1
- </sx:div>
- <sx:div label="Tab 2" >
- Local Tab 2
- </sx:div>
- </sx:tabbedpanel>
- <!-- 設置選項卡允許關閉,使用屬性closeable -->
- <hr color="blue">
- <b>設置選項卡允許關閉,使用屬性closeable:</b>
- <br>
- <sx:tabbedpanel id="tab8">
- <sx:div label="Tab 1" >
- Local Tab 1
- </sx:div>
- <sx:div label="Tab 2" closable="true">
- Local Tab 2
- </sx:div>
- </sx:tabbedpanel>
- <br/>--------------------------------------------------------------<br/>
- #、sx:textarea @textarea控件 <br/>
- <sx:textarea label="簡介" value="sx:textareasx:textareasx:<br/>textareasx:textareasx:textareasx:<br/>textareasx:textareasx:<br/>textareasx:textarea"></sx:textarea>
- <br/>--------------------------------------------------------------<br/>
- #、sx:tree @樹控件 <br/>
- <sx:tree id="tree1" label="根節點">
- <sx:treenode id="tn1" label="財務部" />
- <sx:treenode id="tn2" label="開發部">
- <sx:treenode id="tn3" label="JAVA" />
- <sx:treenode id="tn4" label=".NET" />
- </sx:treenode>
- <sx:treenode id="tn5" label="人事部" />
- </sx:tree>
- </s:form>
- </body>
- </html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="com.rao.bean.Sex"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My page</title>
<s:head theme="xhtml"/>
<sx:head parseContent="true"/>
</head>
<body>
Struts 2.1 Tags
<br/>
<br/>
一、控制標籤<br/><hr size="3" color="red">
#、if /elseif/ else @用於邏輯判斷<br/>
<s:set name="bir" value="-12"></s:set>
<s:if test="#bir>=180 || #bir<0">
你是何方妖怪?
</s:if>
<s:elseif test="#bir<=18 && #bir>=0">
未成年人不能進入!
</s:elseif>
<s:elseif test="#bir<=60 && #bir>=18">
您已經成年!
</s:elseif>
<s:else>
您已經老了!
</s:else>
<br/>--------------------------------------------------------------<br/>
#、append @用於將多個集合合併<br/>
<s:set name="appList1" value="{'111','222','333','444'}"></s:set>
<s:set name="appList2" value="{'aaa','bbb','ccc','ddd'}"></s:set>
<s:append var="newAppList">
<s:param value="appList1"></s:param>
<s:param value="appList2"></s:param>
</s:append>
<s:iterator value="#newAppList">
<s:property/> |
</s:iterator>
<br/>--------------------------------------------------------------<br/>
#、generator <br/>
generator標籤,該標籤可以將指定字符串按指定分隔符分割成多個字串。生成的多個字串可以用iterator標籤進行迭代輸出。可以這麼理解:generator標籤將一個字符串轉換成一個List集合。在該標籤體內,整個臨時生成的集合將爲Valuestack的頂端,但一旦該標籤結束,生成的集合將被移除Valuestack。generator標籤有如下幾個屬性:
<br/>
1、count屬性:指定生成集合中元素的總數。可選屬性。<br/>
2、val屬性:必填屬性,指定被解析的字符串。<br/>
3、separator屬性:這是一個必填屬性,指定用於分割字符串的分隔符。<br/>
4、converter屬性:可選屬性,指定一個轉換器,轉換器負責將生成的集合中的每個字符串轉換成對象,通過這個轉換器可以將一個含有分隔符的字符串解析成對象的集合。轉換器必須一個繼承org.apache.struts2.util.IteratorGenerator.Converter的對象。
<br/>
5、var屬性,可選屬性。如果指定了該屬性,則將生成的集合保存在Stack Context中。如果不指定該屬性,則將生成的集合放入ValueStack的頂端,該標籤一結束,生成的集合就被移除。該屬性也可替換成id。
<br/>
<s:generator val="'aaa,bbb,ccc,ddd'" separator="," count="2">
<s:iterator>
<s:property/>
</s:iterator>
</s:generator><br/>
<br/>--------------------------------------------------------------<br/>
#、iterator 用於迭代數據<br/>
<s:set name="iterList" value="{'aaa','bbb','ccc','ddd'}"></s:set>
<table border="1">
<tr>
<td> 索引 </td>
<td> 值 </td>
<td> 奇? </td>
<td> 偶? </td>
<td> 首? </td>
<td> 尾? </td>
<td> 當前迭代數量 </td>
</tr>
<s:iterator value="{'aaa','bbb','ccc','ddd','eee','fff'}" begin="1" status="s">
<tr bgcolor="<s:if test="#s.odd">pink</s:if>">
<td><s:property value="#s.index"/></td>
<td><s:property/></td>
<td><s:property value="#s.even"/></td>
<td><s:property value="#s.odd"/></td>
<td><s:property value="#s.first"/></td>
<td><s:property value="#s.last"/></td>
<td><s:property value="#s.count"/></td>
</tr>
</s:iterator>
</table>
<br/>--------------------------------------------------------------<br/>
#、merge @和類似:用於將多個集合合併<br/>
<s:set name="merList1" value="{'111','222','333','444'}"></s:set>
<s:set name="merList2" value="{'aaa','bbb','ccc','ddd'}"></s:set>
<s:append var="newMerList">
<s:param value="merList1"></s:param>
<s:param value="merList2"></s:param>
</s:append>
<s:iterator value="#newMerList">
<s:property/> |
</s:iterator>
<br/>--------------------------------------------------------------<br/>
#、sort @用於排序<br/>
<s:bean var="myComparator" name="com.rao.comparator.MyComparator"></s:bean>
<s:sort comparator="#myComparator" source="{1,45,56,0,345,3}">
<s:iterator>
<s:property/>,
</s:iterator>
</s:sort>
<br/>--------------------------------------------------------------<br/>
#、subset @用戶截取集合中的子集; 注:decider:可選屬性,指定由開發者自己決定是否選中該元素.
<br/>
<s:set name="subList" value="{'@@@','***','&&&','###'}"></s:set>
<s:subset source="#subList" start="1" count="2">
<s:iterator>
<s:property/>,
</s:iterator>
</s:subset>
<br/>--------------------------------------------------------------<br/>
二、數據標籤<br/>
<hr size="3" color="red">
#、action @用於導入一個Action<br/>
使用action標籤,可以允許在jsp頁面中直接調用Action,在調用Action時候,可以指定需要被調用的Action的name和namespace.如果指定了executeResult參數的屬性值爲true,該標籤會把Action的處理結果(視圖資源)包含到本頁面中. 使用action標籤指定屬性有:
<br/>
id: 可選屬性,作爲該Action的引用ID <br/>
name:必選屬性,指定調用Action <br/>
namespace:可選屬性,指定該標籤調用Action所屬namespace <br/>
executeResult:可選屬性,指定是否將Action的處理結果包含到本頁面中.默認值爲false,不包含. <br/>
ignoreContextParam:可選參數,指定該頁面的請求參數是否需要傳入調用的Action中,默認值是false,即傳入參數.<br/>
s:param是以request方式的值的,而不是以參數傳值,所以request.getParameter("")會獲取不到值,通過request.getAttribute("")方式可以獲取<br/>
<s:action name="tagsAction1" ignoreContextParams="true" executeResult="true" namespace="/com/rao">
<s:param name="userName" value="'三毛'"></s:param>
</s:action>
<br/>--------------------------------------------------------------<br/>
#、bean @用於導入一個javaBean,相當於:jsp:useBean 標籤<br/>
<s:bean name="com.rao.bean.UserBean" var="user">
<s:param name="userId" value="1001"></s:param>
<s:param name="userName" value="'張三'"></s:param>
</s:bean>
userId:<s:property value="#user.userId"/><br>
userName:<s:property value="#user.userName"/>
<br/>--------------------------------------------------------------<br/>
#、date @用於格式化日期<br/>
<s:set name="dt" value="new java.util.Date()"></s:set>
當期系統時間是:<s:date name="dt" format="yyyy-MM-dd HH:ss:mm"/>
<br/>--------------------------------------------------------------<br/>
#、debug @用於調試程序,讓開發人員一目瞭然的知道當前請求、值棧、棧中的各項參數<br/>
<s:debug/>
<br/>--------------------------------------------------------------<br/>
#、i18n @用於訪問國際化資源文件的內容<br/>
1.默認訪問全局範圍內的資源文件;
<br>
<s:text name="welcome">
<s:param>三毛</s:param>
<s:param>學習</s:param>
</s:text>
<hr>
2.訪問包範圍內的資源文件;
<br>
<s:i18n name="com/rao/action/package">
<s:text name="welcome">
<s:param>三毛</s:param>
<s:param>學習</s:param>
</s:text>
</s:i18n>
<hr>
3.訪問Action範圍內的資源文件;
<br>
<s:i18n name="com/rao/action/GlobalNativeAction">
<s:text name="welcome">
<s:param>三毛</s:param>
<s:param>學習</s:param>
</s:text>
</s:i18n>
<br/>--------------------------------------------------------------<br/>
#、include @用於導入一個jsp文件,等同於:jsp:include標籤<br/>
<s:include value="success.jsp"></s:include>
<br/>--------------------------------------------------------------<br/>
#、param @用於給指定參數設置值<br/>
<s:bean name="com.rao.bean.UserBean" var="user">
<s:param name="userId" value="1001"></s:param>
<s:param name="userName" value="'張三'"></s:param>
</s:bean>
userId:<s:property value="#user.userId"/><br>
userName:<s:property value="#user.userName"/>
<br/>--------------------------------------------------------------<br/>
#、property @輸出結果,很像EL表達式,但是可以依託於OGNL錶帶是很強大<br/>
同上
<br/>--------------------------------------------------------------<br/>
#、push @該標籤可以把程序員在ActionContext中引用的對像壓入valuestack中,爲以後訪問對象提供了方便<br/>
<s:push value="#request.user"><s:property value="userName"/></s:push>
<br/>--------------------------------------------------------------<br/>
#、set @用戶聲明對象或屬性<br/>
<s:set name="uName" value="#request.user.userName"></s:set>
<s:property value="#uName"/>,你好啊!
<br/>--------------------------------------------------------------<br/>
#、text @用戶獲取國際化資源文件的內容<br/>
請參考 il8n標籤
<br/>--------------------------------------------------------------<br/>
#、url @用於組拼一個請求路徑<br/>
<s:url var="url1" action="MyAction" method="add">
<s:param name="id" value="%{23}"></s:param>
<s:param name="name" value="%{'tom'}"></s:param>
</s:url>
<s:property value="#url1"/>
<br/>
注意:<br/>
<s:set name="myurl" value="'http://www.baidu.com'"></s:set>
value以字符處理: <s:url value="#myurl"></s:url><br>
value明確指定以ognl表達式處理: <s:url value="%{#myurl}"></s:url>
<br/>--------------------------------------------------------------<br/>
三、UI標籤<br/>
<hr size="3" color="red">
<s:form>
#、checkboxlist @複選框列表<br>
1> .list 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
name:checkboxlist的名字<br>
list:checkboxlist要顯示的列表<br>
value:checkboxlist默認被選中的選項,checked=checked<br>
<s:checkboxlist theme="simple" name="checkbox1" list="{'上網','看書','爬山','游泳','唱歌'}" value="{'上網','看書'}" ></s:checkboxlist>
<br>
2> .Map 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
name:checkboxlist的名字<br>
list:checkboxlist要顯示的列表<br>
listKey:checkbox 的value的值<br>
listValue:checkbox 的lablel(顯示的值)<br>
value:checkboxlist默認被選中的選項,checked=checked<br>
<s:checkboxlist theme="simple" name="checkbox2" list="#{1:'上網',2:'看書',3:'爬山',4:'游泳',5:'唱歌'}" listKey="key" listValue="value" value="{1,2,5}" ></s:checkboxlist>
<br/>--------------------------------------------------------------<br/>
#、combobox <br/>
<s:combobox theme="simple" label="選擇你喜歡的顏色" name="colorNames" headerValue="------請選擇------" headerKey="1" list="{'紅','橙','黃','綠','青','藍','紫'}" />
<br/>--------------------------------------------------------------<br/>
#、radio @單選框<br/>
<%
Sex sex1 = new Sex(1,"男");
Sex sex2 = new Sex(2,"女");
List<Sex> list = new ArrayList<Sex>();
list.add(sex1);
list.add(sex2);
request.setAttribute("sexs",list);
%>
這個與checkboxlist差不多;<br>
1>.如果集合爲javabean:<s:radio theme="simple" name="sex" list="#request.sexs" listKey="id" listValue="name"></s:radio><br>
2>.如果集合爲list:<s:radio theme="simple" name="sexList" list="{'男','女'}"></s:radio><br>
3>.如果集合爲map:<s:radio theme="simple" name="sexMap" list="#{1:'男',2:'女'}" listKey="key" listValue="value"></s:radio><br>
<hr>
<br/>--------------------------------------------------------------<br/>
#、select @下拉列表框<br/>
這個與s:checkboxlist差不多;<br>
1>.如果集合爲javabean:<s:select theme="simple" name="sex" list="#request.sexs" listKey="id" listValue="name"></s:select><br>
2>.如果集合爲list:<s:select theme="simple" name="sexList" list="{'男','女'}"></s:select><br>
3>.如果集合爲map:<s:select theme="simple" name="sexMap" list="#{1:'男',2:'女'}" listKey="key" listValue="value"></s:select><br>
<br/>--------------------------------------------------------------<br/>
#、doubleselect @級聯菜單 <br/>
<!-- 可以用直接指定,當然也可以跟數據庫綁定的 -->
<s:set name="proviList" value="{'江西省','湖北省'}"></s:set>
<s:set name="jxList" value="{'南昌市','贛州市','九江市','上饒市','鷹潭市'}"></s:set>
<s:set name="hbList" value="{'武漢市','恩施市','十堰市','荊州市','襄樊市'}"></s:set>
<s:doubleselect theme="simple" name="provi" doubleList="top=='江西省' ? #jxList : #hbList" list="#proviList" doubleName="city"></s:doubleselect>
<br/>--------------------------------------------------------------<br/>
#、optiontransferselect <br/>
<s:optiontransferselect theme="simple" label="change" name="abc" doubleList="{'111','222','333','444'}" list="{'aaa','bbb','ccc','ddd'}" doubleName="number"></s:optiontransferselect>
<br/>--------------------------------------------------------------<br/>
#、updownselect @可上下選擇的select <br/>
<s:updownselect label="selectCity" emptyOption="true" name="selectCity" list="#jxList" headerValue="-Please Select The City-" headerKey="-1"></s:updownselect>
<br/>--------------------------------------------------------------<br/>
#、sx:datetimepicker @日期選擇控件 <br/>
使用步驟:聲明:我這裏用的是strut 2.1.8.1,在struts2.0的版本中可能有所不同;<br/>
1.導入struts2-dojo-plugin-2.1.8.1.jar DoJo 插件包;<br/>
2. 導入標籤:<%--@ taglib prefix="sx" uri="/struts-dojo-tags"--%>;<br/>
3.在需要使用的頁面中的head標籤之間加上<%-- <sx:head parseContent="true"/> --%>;<br/>
<sx:datetimepicker label="birthday" name="bir" value="#dt"></sx:datetimepicker>
<br/>--------------------------------------------------------------<br/>
#、sx:tabbedpanel @選項卡控件 <br/>
聲明:這個標籤代碼轉至:http://blog.sina.com.cn/s/blog_6145ed810100ecud.html,版權歸作者所有;寫的挺好拿來大家共同學習。
<!-- tabbedpanel標籤 -->
<!-- 最簡單的選項卡,兩個選項卡加載都是本頁面 -->
<hr color="blue">
<b>最簡單的選項卡:</b>
<br>
<sx:tabbedpanel id="tab1" beforeSelectTabNotifyTopics="/beforeSelect">
<sx:div label="Tab 1" >
Local Tab 1
</sx:div>
<sx:div label="Tab 2" >
Local Tab 2
</sx:div>
</sx:tabbedpanel>
<!-- 加載其他頁面的選項卡 -->
<hr color="blue">
<b>加載其他頁面的選項卡:</b>
<br>
<sx:tabbedpanel id="tab2">
<sx:div label="Remote Tab 1" href="upload.jsp">
Remote Tab 1
</sx:div>
<sx:div label="Remote Tab 2" href="multipleUpload.jsp" >
Remote Tab 1
</sx:div>
</sx:tabbedpanel>
<!-- 設置選項卡底下的內容懶加載,即等需要的時候再加載,使用屬性preload="false"-->
<hr color="blue">
<b>設置選項卡底下的內容懶加載,即等需要的時候再加載,使用屬性preload="false":</b>
<br>
<sx:tabbedpanel id="tab3">
<sx:div label="Remote Tab 1" href="upload.jsp">
Remote Tab 1
</sx:div>
<sx:div label="Remote Tab 2" href="multipleUpload.jsp" preload="false">
Remote Tab 1
</sx:div>
</sx:tabbedpanel>
<!-- 固定大小的選項卡 -->
<hr color="blue">
<b>固定大小的選項卡,使用屬性cssStyle和doLayout:</b>
<br>
<sx:tabbedpanel cssStyle="width: 200px; height: 100px;" doLayout="true" id="tab4">
<sx:div label="Tab 1" >
Local Tab 1
</sx:div>
<sx:div label="Tab 2" >
Local Tab 2
</sx:div>
</sx:tabbedpanel>
<!-- 每次點擊選項卡時都重新刷新內容 -->
<hr color="blue">
<b>每次點擊選項卡時都重新刷新內容,使用屬性refreshOnShow:</b>
<br>
<sx:tabbedpanel id="tab5">
<sx:div label="Remote Tab 1" href="upload.jsp" refreshOnShow="true">
Remote Tab 1
</sx:div>
<sx:div label="Remote Tab 2" href="multipleUpload.jsp" refreshOnShow="true">
Remote Tab 2
</sx:div>
</sx:tabbedpanel>
<!-- 使得其中一個選項卡失效 -->
<hr color="blue">
<b>使得其中一個選項卡失效:</b>
<br>
<sx:tabbedpanel id="tab6">
<sx:div label="Tab 1" >
Local Tab 1
</sx:div>
<sx:div label="Tab 2" disabled="true">
Local Tab 2
</sx:div>
</sx:tabbedpanel>
<!-- 設置選項卡在底部顯示 (可以是: top, right, bottom, left) -->
<hr color="blue">
<b>設置選項卡在底部顯示 (可以是: top, right, bottom, left):</b>
<br>
<sx:tabbedpanel id="tab7" labelposition="bottom" cssStyle="width:200px;height:100px;" doLayout="true">
<sx:div label="Tab 1" >
Local Tab 1
</sx:div>
<sx:div label="Tab 2" >
Local Tab 2
</sx:div>
</sx:tabbedpanel>
<!-- 設置選項卡允許關閉,使用屬性closeable -->
<hr color="blue">
<b>設置選項卡允許關閉,使用屬性closeable:</b>
<br>
<sx:tabbedpanel id="tab8">
<sx:div label="Tab 1" >
Local Tab 1
</sx:div>
<sx:div label="Tab 2" closable="true">
Local Tab 2
</sx:div>
</sx:tabbedpanel>
<br/>--------------------------------------------------------------<br/>
#、sx:textarea @textarea控件 <br/>
<sx:textarea label="簡介" value="sx:textareasx:textareasx:<br/>textareasx:textareasx:textareasx:<br/>textareasx:textareasx:<br/>textareasx:textarea"></sx:textarea>
<br/>--------------------------------------------------------------<br/>
#、sx:tree @樹控件 <br/>
<sx:tree id="tree1" label="根節點">
<sx:treenode id="tn1" label="財務部" />
<sx:treenode id="tn2" label="開發部">
<sx:treenode id="tn3" label="JAVA" />
<sx:treenode id="tn4" label=".NET" />
</sx:treenode>
<sx:treenode id="tn5" label="人事部" />
</sx:tree>
</s:form>
</body>
</html>
struts.xml 代碼:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "struts-2.1.7.dtd" >
- <struts>
- <constant name="struts.custom.i18n.resources" value="struts2"></constant>
- <constant name="struts.configuration.xml.reload" value="true"></constant>
- <package name="package1" namespace="/com/rao" extends="struts-default">
- <action name="tagsAction1" class="com.rao.action.TagsAction1">
- <result>/success.jsp</result>
- </action>
- </package>
- </struts>
TagsAction1.java 代碼:
- package com.rao.action;
- import com.opensymphony.xwork2.ActionSupport;
- public class TagsAction1 extends ActionSupport {
- private String userName;
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- @Override
- public String execute() throws Exception {
- return SUCCESS;
- }
- }
package com.rao.action;
import com.opensymphony.xwork2.ActionSupport;
public class TagsAction1 extends ActionSupport {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
GlobalNativeAction.java
- package com.rao.action;
- import com.opensymphony.xwork2.ActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- /**
- * 演示的是在Action 中獲取國際化資源文件中的內容
- * @author Administrator
- *
- */
- public class GlobalNativeAction extends ActionSupport {
- @Override
- public String execute() throws Exception {
- //不帶有佔位符的獲取方法
- //ActionContext.getContext().put("message", this.getText("welcome"));
- //帶有佔位符的獲取方法
- ActionContext.getContext().put("message", this.getText("welcome",new String[]{"raozhiyong","study"}));
- return "message";
- }
- }
package com.rao.action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 演示的是在Action 中獲取國際化資源文件中的內容
* @author Administrator
*
*/
public class GlobalNativeAction extends ActionSupport {
@Override
public String execute() throws Exception {
//不帶有佔位符的獲取方法
//ActionContext.getContext().put("message", this.getText("welcome"));
//帶有佔位符的獲取方法
ActionContext.getContext().put("message", this.getText("welcome",new String[]{"raozhiyong","study"}));
return "message";
}
}
struts2_zh_CN.properties
welcome | 全局範圍:{0},這是一箇中文的國際化資源文件,歡迎你的使用{1}!!! |
GlobalNativeAction_zh_CN.properties
welcome | Action範圍:{0},這是一箇中文的國際化資源文件,歡迎你的使用{1}!!! |
package_zh_CN.properties
welcome | package範圍:{0},這是一箇中文的國際化資源文件,歡迎你的使用{1}!!! |
Sex.java
- package com.rao.bean;
- public class Sex {
- private int id;
- private String name;
- public Sex(int id, String name) {
- super();
- this.id = id;
- this.name = name;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
package com.rao.bean;
public class Sex {
private int id;
private String name;
public Sex(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
UserBean.java
- package com.rao.bean;
- import java.io.Serializable;
- public class UserBean implements Serializable{
- private static final long serialVersionUID = 1L;
- public UserBean() {}
- private Integer userId;
- private String userName;
- public Integer getUserId() {
- return userId;
- }
- public void setUserId(Integer userId) {
- this.userId = userId;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- }
package com.rao.bean;
import java.io.Serializable;
public class UserBean implements Serializable{
private static final long serialVersionUID = 1L;
public UserBean() {}
private Integer userId;
private String userName;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
MyComparator.java
- package com.rao.comparator;
- import java.util.Comparator;
- public class MyComparator implements Comparator<Integer> {
- public int compare(Integer o1, Integer o2) {
- int c = o1.compareTo(o2);
- return c;//可以完成順序排序
- //return -c;//可以完成倒序排序
- }
- }
package com.rao.comparator;
import java.util.Comparator;
public class MyComparator implements Comparator<Integer> {
public int compare(Integer o1, Integer o2) {
int c = o1.compareTo(o2);
return c;//可以完成順序排序
//return -c;//可以完成倒序排序
}
}
運行結果,附上圖片:
代碼見附件壓縮包:Struts2-Tags.zip。謝謝!