struts2中的s標籤解析
阿新 • • 發佈:2019-01-23
那就從簡單的標籤說起吧!1.x中常用的標籤只有4中html、bean、logic、tiles
而struts2.0裡的標籤卻沒有分類,只用在jsp標頭檔案加上
<%@ taglib prefix="s" uri="/struts-tags" %> 就能使用struts2.0的標籤庫
下面就介紹每個標籤的具體應用例項說明:按字母排列
A:
1.
2. <s:a href=""></s:a>-----超連結,類似於html裡的<a></a>
3. <s:action name=""></s:action>-----執行一個view裡面的一個action
4. <s:actionerror/>-----如果action的errors有值那麼顯示出來
5. <s:actionmessage/>-----如果action的message有值那麼顯示出來
6. <s:append></s:append>-----新增一個值到list,類似於list.add();
7. <s:autocompleter></s:autocompleter>-----自動完成<s:combobox>標籤的內容,這個是ajax
B:
1. <s:bean name=""></s:bean>-----類似於struts1.x中的,JavaBean的值
C:
1. <s:checkbox></s:checkbox>-----複選框
2. <s:checkboxlist list=""></s:checkboxlist>-----多選框
3. <s:combobox list=""></s:combobox>-----下拉框
4. <s:component></s:component>-----影象符號
D:
1. <s:date/>-----獲取日期格式
2. <s:datetimepicker></s:datetimepicker>-----日期輸入框
3. <s:debug></s:debug>-----顯示錯誤資訊
4. <s:div></s:div>-----表示一個塊,類似於html的<div></div>
5. <s:doubleselect list="" doubleName="" doubleList=""></s:doubleselect>-----雙下拉框
E:
1. <s:if test=""></s:if>
2. <s:elseif test=""></s:elseif>
3. <s:else></s:else>-----這3個標籤一起使用,表示條件判斷
F:
1. <s:fielderror></s:fielderror>-----顯示檔案錯誤資訊
2. <s:file></s:file>-----檔案上傳
3. <s:form action=""></s:form>-----獲取相應form的值
G:
1. <s:generator separator="" val=""></s:generator>----和<s:iterator>標籤一起使用
H:
1. <s:head/>-----在<head></head>裡使用,表示標頭檔案結束
2. <s:hidden></s:hidden>-----隱藏值
I:
1. <s:i18n name=""></s:i18n>-----載入資源包到值堆疊
2. <s:include value=""></s:include>-----包含一個輸出,servlet或jsp頁面
3. <s:inputtransferselect list=""></s:inputtransferselect>-----獲取form的一個輸入
4. <s:iterator></s:iterator>-----用於遍歷集合
L:
1. <s:label></s:label>-----只讀的標籤
M:
1. <s:merge></s:merge>-----合併遍歷集合出來的值
O:
1. <s:optgroup></s:optgroup>-----獲取標籤組
2. <s:optiontransferselect doubleList="" list="" doubleName=""></s:optiontransferselect>-----左右選擇框
P:
1. <s:param></s:param>-----為其他標籤提供引數
struts2的s:param標籤主要有兩個屬性name與value, 若想在value屬性中輸入直接量,則可以這樣寫:<s:param name="some" value="%{'user'}"/>, 也可以這樣寫:<s:paramname="some">user</s:param>。但如果直接賦值,這個值不是由Action動態生成的,而是自己指定的一個字串,則只能用後者
2. <s:password></s:password>-----密碼輸入框
3. <s:property/>-----得到'value'的屬性
4. <s:push value=""></s:push>-----value的值push到棧中,從而使property標籤的能夠獲取value的屬性
R:
1.
2. <s:radio list=""></s:radio>-----單選按鈕
3. <s:reset></s:reset>-----重置按鈕
S:
1. <s:select list=""></s:select>-----單選框
2. <s:set name=""></s:set>-----賦予變數一個特定範圍內的值
3. <s:sort comparator=""></s:sort>-----通過屬性給list分類
4. <s:submit></s:submit>-----提交按鈕
5. <s:subset></s:subset>-----為遍歷集合輸出子集
T:
1. <s:tabbedPanel id=""></s:tabbedPanel>-----表格框
2. <s:table></s:table>-----表格
3. <s:text name=""></s:text>-----I18n文字資訊
4. <s:textarea></s:textarea>-----文字域輸入框
5. <s:textfield></s:textfield>-----文字輸入框
6. <s:token></s:token>-----攔截器
7. <s:tree></s:tree>-----樹
8. <s:treenode label=""></s:treenode>-----樹的結構
U:
1. <s:updownselect list=""></s:updownselect>-----多選擇框
2. <s:url></s:url>-----建立url
___________________________________________________
struts2框架的標籤庫分為三類:
使用者標籤:生成HTML元素
非使用者標籤:資料訪問、邏輯控制等。
AJAX標籤:支援AJAX技術。
使用者介面標籤又分兩類:
表單標籤:生成HTML頁面的from元素
非表單標籤:生成頁面上的Tab、Tree等
非介面標籤又分為資料訪問標籤和流程控制標籤。
控制標籤:
if/elseif/else標籤:控制流程分支。
iteratot標籤:對集合屬性迭代(屬性型別:List、Map、陣列)。
append標籤:將多個集合物件拼接在一起,組成一個新的集合。將多個集合使用一個<iterator/>標籤完成迭代。
generatot標籤:將指定的字串按照規定的分隔符分解成多個子字串。
merge標籤:將多個集合拼接在一起。
subset標籤:獲取某個集合的子集合。
sort標籤:多指定的集合元素進行排序。
資料標籤:
action:直接呼叫一個Action,根據executeResult引數,可以將Action的處理結果包含到頁面中。
bean:建立一個JavaBean例項。。
date:格式化輸出一個日期屬性。
debug:生成一個除錯連結,當單擊該連結時,可以看到當前棧值中的內容。
i18n:指定國際化資原始檔的baseName。
include:包含其他的頁面資源。
param:設定引數。
property:輸出某個值。可以輸出值棧、StackContext 、ActionContext中的值。
push:將某個值放入值棧。
set:設定一個新的變數。
text:輸出國際化資訊。
url:生成一個URL地址。
表單標籤:
checkbox標籤:複選框。
checkboxlist標籤:根據一個集合屬性建立一系列的複選框。
combobox標籤:生成一個單選文字框和一個下拉列表框的組合。
doubleselect標籤:生成一個相互關聯的列表框,該標籤由兩個下拉選擇框組成。
datetimepicker標籤:生成一個日期、時間下拉列表框。
head標籤:生成HTML頁面的HEAD部分。
file標籤:在頁面上生成一個上傳檔案元素。
hidder標籤:生成一個不看見的使用者輸入元素。
select標籤:生成下拉列表框。
optiontransferselect標籤:建立兩個選項以及轉移下拉列表項,該標籤生成兩個下拉列表框,同時生成相應的按鈕,這些按鈕可以控制選項在兩個下拉列表之間移動、排序。
radio標籤:單選框。
optgroup標籤:生成一個下拉列表框的選擇組,下拉列表框中可以包含多個選擇組。
token標籤:防使用者多次提交表單。
textarea標籤:文字域。
updownselct標籤:支援選項內容的上下移動。
password表單:密碼錶單域。
textfield標籤:單行文字輸入框。
非表單標籤:
actionerror標籤:輸出Action中getActionErrors()方法返回的異常資訊。
actionmessage標籤:輸出Action中getActionErrors()方法返回的資訊。
component標籤:生成一個自定義的元件。
div標籤:AJAX標籤,生成一個div片段。
fielderror標籤:輸出異常提示資訊。
tabbedPanel:AJAX標籤,生成HTML中的Tab頁。
tree標籤:生成一個樹形結構。
treenode標籤:生成樹形結構的節點。
____________________________________________________
Struts之LOGIC標籤庫詳解
1. logic:empty
該標籤是用來判斷是否為空的。如果為空,該標籤體中嵌入的內容就會被處理。該標籤用於以下情況:
1)當Java物件為null時;
2)當String物件為""時;
3)當java.util.Collection物件中的isEmpty()返回true時;
4)當java.util.Map物件中的isEmpty()返回true時。
eg.
該句等同於:
if (userList.isEmpty()) {
...
}
2. logic:notEmpty
該標籤的應用正好和logic:empty標籤相反。
3. logic:equal
該標籤為等於比較符。
eg1. 比較使用者的狀態屬性是否1,若為1,輸出"啟用";
eg2. 如果上例中的value值是動態獲得的,例如需要通過bean:write輸出,因struts不支援標籤巢狀,可採用EL來解決該問題。
4. logic:notEqual
該標籤意義與logic:equal相反,使用方法類似,略。
5. logic:forward
該標籤用於實現頁面導向,查詢配置檔案的全域性forward。struts-config.xml檔案中全域性轉向
eg. <logic:forward name="redirect"/>
6. logic:greaterEqual
為大於等於比較符。
eg. 當某學生的成績大於等於60時,輸出“及格”:
<logic:greaterEqual name="student" property="scores" value="60">
及格
</logic:greaterEqual>
7. logic:greaterThan
此為大於比較符,使用方法同logic:greaterEqual;
8. logic:lessEqual
此為小於等於比較符,使用方法同logic:greaterEqual;
9. logic:lessThan
此為小於比較符,使用方法同logic:greaterEqual;
10. logic:match
此標籤比較物件是否相等;
eg1. 檢查在request範圍內的name屬性是否包含"hello"串:
<logic:match name="name" scope="request" value="hello">
<bean:write name="name"/>中有一個“hello”串。
</logic:match>
eg2. 檢查在request範圍內的name屬性是否已“hello”作為起始字串:
<logic:match name="name" scope="request" value="hello" location="start">
<bean:write name="name"/>以“hello”作為起始字串。
</logic:match>
eg3.
<logic:match header="user-agent" value="Windows">
你執行的是Windows系統
</logic:match>
11. logic:notMatch
此標籤用於比較物件是否不相同,與logic:match意義相反,使用方法類似
12. logic:messagePresent
該標籤用於判斷ActionMessages/ActionErrors物件是否存在;
eg. 如果存在error資訊,將其全部輸出:
<logic:messagePresent property="error">
<html:messages property="error" id="err" >
<bean:write name="err"/>
</html:messages>
</logic:messagePresent >
13. logic:messagesNotPresent
該標籤用於判斷ActionMessages/ActionErrors物件是否不存在,使用方法與logic:messagePresent類似
14. logic:present
此標籤用於判斷request物件傳遞引數是否存在。
eg1. user物件和它的name屬性在request中都存在時,輸出相應字串:
<logic:present name="user" property="name">
user物件和該物件的name屬性都存在
</logic:present>
eg2. 若有一個名字為“hello”的JavaBean,輸出對應字串:
<logic:present name="hello" >
有一個名字為“hello”的JavaBean。
</logic:present>
eg3.
<logic:present header="user-agent">
we got a user-agent header.
</logic:present>
15. logic:notPresent
此標籤用於判斷request物件傳遞引數是否不存在,意義與了logic:present相反,使用方法類似。
16. logic:iterator
用於顯示列表為collection的值(List ,ArrayList,HashMap等)。
eg1. 逐一輸出使用者列表(empList)中使用者的姓名:
<logic:iterate id="emp" name="empList">
<bean:write name="emp" property="name"/><br>
</logic:iterate>
eg2. 從使用者列表中輸出從1開始的兩個使用者的姓名
<logic:iterate id="emp" name="empList" indexId="index" offset="1" length="2">
<bean:write name="index"/>.<bean:write name="emp" property="name"/><br>
</logic:iterate>
eg3. logic:iterator標籤的巢狀舉例
<logic:iterate id="emp" indexId="index" name="empList">
<bean:write name="index"/>. <bean:write name="emp" property="name"/><br>
<logic:iterate id="address" name="emp" property="addressList" length="3" offset="1">
<bean:write name="address"/><br>
</logic:iterate>
</logic:iterate>
17. logic:redirect
該標籤用於實現頁面轉向,可傳遞引數。
eg. <logic:redirect href="http://www.javaeye.com"/>
logic:iterate
logic:iterate標籤用來迭代集合,您可以使用如下方式來為這個標籤指定其要疊代的集合:
使用一個執行時表示式,這個表示式的值是一個集合。
用name屬性引用一個JSP Bean,這個JSP Bean本身就是一個集合。
用name屬性引用一個JSP Bean,這個JSP Bean的一個屬性是一個集合,這時可以聯合使用property來指定這個集合。
上面所提到的集合可以是:
物件型別或原子型別的陣列(Array)。
java.util.Collection的實現,包括ArrayList,Vector。
java.util.Enumeration的實現。
java.util.Iterator的實現。
java.util.Map的實現,包括HashMap,Hashtable和TreeMap。
如果您疊代的集合中含有null的值,這時需要採取一定的措施,因為這時logic:iterate不會在page作用域中建立物件。一般是使用<logic:present>標籤或<logic:notPresent>標籤來判斷一下。
下面是logic:iterate疊代ArrayList的示例的物件引用關係和部分程式碼:
圖示 3. logic:iterate中物件的引用關係
圖中的persons列表是在ListAction中填充的,在這裡只是簡單的加入了三個Person物件,在實際的應用中這些資料應該取自資料庫。具體的程式碼如下:
public ActionForward execute(ActionMapping mapping,ActionForm. form,
HttpServletRequest request, HttpServletResponse response) {
ListForm. listForm. = (ListForm) form;
List<Person> persons = new ArrayList<Person>();
Person person1 = new Person();
person1.setId("00001");
person1.setName("趙辰");
Person person2 = new Person();
person2.setId("00002");
person2.setName("李為芳");
Person person3 = new Person();
person3.setId("00003");
person3.setName("王微");
persons.add(person1);
persons.add(person2);
persons.add(person3);
listForm.setPersons(persons);
return mapping.findForward("success");
}
標籤輸出的結果為:
00001-->趙辰
00002-->李為芳
00003-->王微
回頁首
logic:present
如果指定的值出現該標籤就會建立其標籤體內的內容。該標籤用於以下情況:
檢查具有指定名稱的cookie是否出現。
檢查具有指定名稱的header是否出現。
檢查具有指定名稱的JSP Bean是否出現 或 檢查具有指定名稱的JSP Bean中的property屬性是否出現。
檢查request中指定名稱的引數是否出現。
檢查當前的認證使用者是否與指定的安全形色相關聯。
檢查當前認證的主體是否具有指定的名字。
下面的程式碼示例了logic:present標籤檢查具有指定名稱User-Agent的header是否出現:
<logic:present header="User-Agent">
您的瀏覽器是<bean:header id="userAgent" name="User-Agent"/>
<bean:write name="userAgent"/>。<br/>
</logic:present>
logic:notPresent標籤的應用正好和logic:present標籤相反。
回頁首
logic:messagesPresent
logic:messagesPresent標籤用於以下情況:
在request作用域中存在一個ActionMessages物件,標籤的property屬性和ActionMessages中的property對應。
在request作用域中存在一個ActionErrors物件,標籤的property屬性和ActionErrors中的property對應。
存在一個String物件,將其轉換(構造)成ActionMessage然後在新增到ActionMessages中。
存在一個String Array物件,將陣列中的每一個String轉換成一個ActionMessage,在將其新增到ActionMessages中。
標籤的message屬性值為true時將以Globals.MESSAGE_KEY為key在request作用域中查詢Message,其它情況下,將name的值作為key查詢,如果name 沒有出現,預設值為Globals.ERROR_KEY。
下面的程式碼示例了logic:messagesPresent標籤的典型用法:
<logic:messagesPresent>
<ul>
<html:messages id="message">
<li><bean:write name="message"/></li>
</html:messages>
</ul>
</logic:messagesPresent>
標籤logic:messagesNotPresent的應用正好和logic:messagesPresent的應用相反。
回頁首
logic:empty
logic:empty標籤是用來判斷是否為空的。如果為空,該標籤體中嵌入的內容就會被處理。該標籤用於以下情況:
當Java物件為null時
當String物件為""時
當java.util.Collection物件中的isEmpty()返回true時
當java.util.Map物件中的isEmpty()返回true時
下面的程式碼示例了logic:empty標籤判斷集合persons是否為空:
<logic:empty name="listForm" property = "persons">
<div>集合persons為空!</div>
</logic:empty>
logic:notEmpty標籤的應用正好和logic:empty標籤相反。
回頁首
logic:match
logic:match標籤用來處理子串匹配問題。
如果指定的值匹配該標籤就會建立其標籤體內的內容。該標籤用於以下情況:
檢查具有指定名稱的cookie是否與該標籤的value匹配。
檢查具有指定名稱的header是否與該標籤的value匹配。
檢查具有指定名稱的JSP Bean是否與該標籤的value匹配 或 檢查具有指定名稱的JSP Bean中的property屬性值是否與該標籤的value匹配。
檢查request中指定名稱的引數值是否與該標籤的value匹配。
下面的程式碼示例了logic:match標籤的典型用法:
<logic:present header="User-Agent">
<logic:match header="User-Agent" value="MSIE 6.0">
MS IE 6.0
</logic:match>
</logic:present>
logic:notMatch標籤的應用正好和logic:match標籤相反。
回頁首
logic:equal
這裡要介紹的不只是logic:equal(=)標籤,而是要介紹一類標籤,這類標籤完成比較運算,包括:
logic:equal(=)
logic:notEqual(!=)
logic:greaterEqual(>=)
logic:lessEqual(<=)
logic:graterThan(>)
logic:lessThan(<)
該類標籤的用法類似,我們只介紹logic:equal標籤,其它的留給您自己去完成。
logic:equal是用來判斷是否相等的。如果相等,該標籤體中嵌入的內容就會被處理。該標籤用於以下情況:
比較由該標籤的cookie屬性指定的cookie的值是否與該標籤的value屬性值相等。
比較由該標籤的header屬性指定的header的值是否與該標籤的value屬性值相等。
比較由該標籤的name屬性指定的JSP Bean是否與該標籤的value屬性值相等(property屬性不出現)或比較由該標籤的name屬性指定的JSP Bean中的property屬性值是否與該標籤的value屬性值相等。
比較由該標籤的parameter屬性指定的引數值(request中)是否與該標籤的value屬性值相等。
回頁首
logic:forward
我覺得將forward和redirect這兩個動作放到一起對比著介紹更加有利於理解,基於此原因也就將logic:forward和logic:redirect這兩個標籤也拿到這裡一起介紹了。
讓我們看看這兩個動作的區別:
forward是在servlet內部執行,瀏覽器完全不會感知到這個動作,原始的url也不會改變,瀏覽器重新裝載的話也只是對原始的請求進行簡單的重複。
redirect則分成兩個步驟:第一步是web應用程式告訴瀏覽器第二個url,然後瀏覽器向第二個url傳送請求。
redirect比forward慢,因為瀏覽器要做二次請求。還有就是要注意,在第一次的請求作用域(request作用域)內的bean對於第二次請求是不可見的。
理解了上面描述的區別也就知道了什麼時候該選用logic:forward標籤什麼時候該選用logic:redirect標籤了。logic:forward標籤完成PageContext.forward()或HttpServletResponse.sendRedirect(),如何選擇由控制器決定。logic:redirect標籤完成HttpServletResponse.sendRedirect()。
在使用logic:redirect標籤時我們可以向使用html:link一樣構造baseurl和query引數。如果您感興趣可以參考html:link標籤。
<s:action>標籤的用法
(2012-09-27 18:04:34)
轉載▼
標籤:
<saction>
struts2
雜談
分類: struts2
使用action標籤,可以允許在jsp頁面中直接呼叫Action,在呼叫Action時候,可以指定需要被呼叫的Action的name和namespace.如果指定了executeResult引數的屬性值為true,該標籤會把Action的處理結果(檢視資源)包含到本頁面中. 使用action標籤指定屬性有:
id: 可選屬性,作為該Action的引用ID
name:必選屬性,指定呼叫Action
namespace:可選屬性,指定該標籤呼叫Action所屬namespace
executeResult:可選屬性,指定是否將Action的處理結果包含到本頁面中.預設值為false,不包含.
ignoreContextParam:可選引數,指定該頁面的請求引數是否需要傳入呼叫的Action中,預設值是false,即傳入引數.
<s:action name="login" executeResult="true" namespace="/"></s:action>
傳遞引數
<s:action name="actinName" executeResult="true" namespace="/">
<s:param name="currentPage" value="傳遞的值"></s:param>
</s:action>
<s:param ></s:param>是以request方式的值的,而不是以引數傳值
所以request.getParameter("")會獲取不到值
通過request.getAttribute("")方式可以獲取
另外:使用<s:param ></s:param> value指代的是action定義的物件的名稱,而不是一個值
和 <s:textfield>中的name是一個意思,所以要要傳遞字串的不能把值寫value中而應該寫到
<s:param >寫到這裡</s:param>
例如:
struts.xml如下配置
<package name="reportList" namespace="/reportList" extends="default">
<action name="tab_*" action="xxxx" method="{1}"
<result></result>
</action>
</package>
頁面載入如下段
<s:action na
me="tab_gotoHeader" namespace="/reportList" executeResult="true">
<s:param name="headerMap" value="headerMap"></s:param>
<s:param name="scopeId" value="1"></s:param>
<s:param name="reportRemark" value="indicator.concept"></s:param>
<s:param name="headerMap['lbName']" value="indicator.description"></s:param>
</s:action>
xxx.action中只要set,get headerMap,scopeId就可以拿到值了
而struts2.0裡的標籤卻沒有分類,只用在jsp標頭檔案加上
<%@ taglib prefix="s" uri="/struts-tags" %> 就能使用struts2.0的標籤庫
下面就介紹每個標籤的具體應用例項說明:按字母排列
A:
1.
2. <s:a href=""></s:a>-----超連結,類似於html裡的<a></a>
3. <s:action name=""></s:action>-----執行一個view裡面的一個action
4. <s:actionerror/>-----如果action的errors有值那麼顯示出來
5. <s:actionmessage/>-----如果action的message有值那麼顯示出來
6. <s:append></s:append>-----新增一個值到list,類似於list.add();
7. <s:autocompleter></s:autocompleter>-----自動完成<s:combobox>標籤的內容,這個是ajax
B:
1. <s:bean name=""></s:bean>-----類似於struts1.x中的,JavaBean的值
C:
1. <s:checkbox></s:checkbox>-----複選框
2. <s:checkboxlist list=""></s:checkboxlist>-----多選框
3. <s:combobox list=""></s:combobox>-----下拉框
4. <s:component></s:component>-----影象符號
D:
1. <s:date/>-----獲取日期格式
2. <s:datetimepicker></s:datetimepicker>-----日期輸入框
3. <s:debug></s:debug>-----顯示錯誤資訊
4. <s:div></s:div>-----表示一個塊,類似於html的<div></div>
5. <s:doubleselect list="" doubleName="" doubleList=""></s:doubleselect>-----雙下拉框
E:
1. <s:if test=""></s:if>
2. <s:elseif test=""></s:elseif>
3. <s:else></s:else>-----這3個標籤一起使用,表示條件判斷
F:
1. <s:fielderror></s:fielderror>-----顯示檔案錯誤資訊
2. <s:file></s:file>-----檔案上傳
3. <s:form action=""></s:form>-----獲取相應form的值
G:
1. <s:generator separator="" val=""></s:generator>----和<s:iterator>標籤一起使用
H:
1. <s:head/>-----在<head></head>裡使用,表示標頭檔案結束
2. <s:hidden></s:hidden>-----隱藏值
I:
1. <s:i18n name=""></s:i18n>-----載入資源包到值堆疊
2. <s:include value=""></s:include>-----包含一個輸出,servlet或jsp頁面
3. <s:inputtransferselect list=""></s:inputtransferselect>-----獲取form的一個輸入
4. <s:iterator></s:iterator>-----用於遍歷集合
L:
1. <s:label></s:label>-----只讀的標籤
M:
1. <s:merge></s:merge>-----合併遍歷集合出來的值
O:
1. <s:optgroup></s:optgroup>-----獲取標籤組
2. <s:optiontransferselect doubleList="" list="" doubleName=""></s:optiontransferselect>-----左右選擇框
P:
1. <s:param></s:param>-----為其他標籤提供引數
struts2的s:param標籤主要有兩個屬性name與value, 若想在value屬性中輸入直接量,則可以這樣寫:<s:param name="some" value="%{'user'}"/>, 也可以這樣寫:<s:paramname="some">user</s:param>。但如果直接賦值,這個值不是由Action動態生成的,而是自己指定的一個字串,則只能用後者
2. <s:password></s:password>-----密碼輸入框
3. <s:property/>-----得到'value'的屬性
4. <s:push value=""></s:push>-----value的值push到棧中,從而使property標籤的能夠獲取value的屬性
R:
1.
2. <s:radio list=""></s:radio>-----單選按鈕
3. <s:reset></s:reset>-----重置按鈕
S:
1. <s:select list=""></s:select>-----單選框
2. <s:set name=""></s:set>-----賦予變數一個特定範圍內的值
3. <s:sort comparator=""></s:sort>-----通過屬性給list分類
4. <s:submit></s:submit>-----提交按鈕
5. <s:subset></s:subset>-----為遍歷集合輸出子集
T:
1. <s:tabbedPanel id=""></s:tabbedPanel>-----表格框
2. <s:table></s:table>-----表格
3. <s:text name=""></s:text>-----I18n文字資訊
4. <s:textarea></s:textarea>-----文字域輸入框
5. <s:textfield></s:textfield>-----文字輸入框
6. <s:token></s:token>-----攔截器
7. <s:tree></s:tree>-----樹
8. <s:treenode label=""></s:treenode>-----樹的結構
U:
1. <s:updownselect list=""></s:updownselect>-----多選擇框
2. <s:url></s:url>-----建立url
___________________________________________________
struts2框架的標籤庫分為三類:
使用者標籤:生成HTML元素
非使用者標籤:資料訪問、邏輯控制等。
AJAX標籤:支援AJAX技術。
使用者介面標籤又分兩類:
表單標籤:生成HTML頁面的from元素
非表單標籤:生成頁面上的Tab、Tree等
非介面標籤又分為資料訪問標籤和流程控制標籤。
控制標籤:
if/elseif/else標籤:控制流程分支。
iteratot標籤:對集合屬性迭代(屬性型別:List、Map、陣列)。
append標籤:將多個集合物件拼接在一起,組成一個新的集合。將多個集合使用一個<iterator/>標籤完成迭代。
generatot標籤:將指定的字串按照規定的分隔符分解成多個子字串。
merge標籤:將多個集合拼接在一起。
subset標籤:獲取某個集合的子集合。
sort標籤:多指定的集合元素進行排序。
資料標籤:
action:直接呼叫一個Action,根據executeResult引數,可以將Action的處理結果包含到頁面中。
bean:建立一個JavaBean例項。。
date:格式化輸出一個日期屬性。
debug:生成一個除錯連結,當單擊該連結時,可以看到當前棧值中的內容。
i18n:指定國際化資原始檔的baseName。
include:包含其他的頁面資源。
param:設定引數。
property:輸出某個值。可以輸出值棧、StackContext 、ActionContext中的值。
push:將某個值放入值棧。
set:設定一個新的變數。
text:輸出國際化資訊。
url:生成一個URL地址。
表單標籤:
checkbox標籤:複選框。
checkboxlist標籤:根據一個集合屬性建立一系列的複選框。
combobox標籤:生成一個單選文字框和一個下拉列表框的組合。
doubleselect標籤:生成一個相互關聯的列表框,該標籤由兩個下拉選擇框組成。
datetimepicker標籤:生成一個日期、時間下拉列表框。
head標籤:生成HTML頁面的HEAD部分。
file標籤:在頁面上生成一個上傳檔案元素。
hidder標籤:生成一個不看見的使用者輸入元素。
select標籤:生成下拉列表框。
optiontransferselect標籤:建立兩個選項以及轉移下拉列表項,該標籤生成兩個下拉列表框,同時生成相應的按鈕,這些按鈕可以控制選項在兩個下拉列表之間移動、排序。
radio標籤:單選框。
optgroup標籤:生成一個下拉列表框的選擇組,下拉列表框中可以包含多個選擇組。
token標籤:防使用者多次提交表單。
textarea標籤:文字域。
updownselct標籤:支援選項內容的上下移動。
password表單:密碼錶單域。
textfield標籤:單行文字輸入框。
非表單標籤:
actionerror標籤:輸出Action中getActionErrors()方法返回的異常資訊。
actionmessage標籤:輸出Action中getActionErrors()方法返回的資訊。
component標籤:生成一個自定義的元件。
div標籤:AJAX標籤,生成一個div片段。
fielderror標籤:輸出異常提示資訊。
tabbedPanel:AJAX標籤,生成HTML中的Tab頁。
tree標籤:生成一個樹形結構。
treenode標籤:生成樹形結構的節點。
____________________________________________________
Struts之LOGIC標籤庫詳解
1. logic:empty
該標籤是用來判斷是否為空的。如果為空,該標籤體中嵌入的內容就會被處理。該標籤用於以下情況:
1)當Java物件為null時;
2)當String物件為""時;
3)當java.util.Collection物件中的isEmpty()返回true時;
4)當java.util.Map物件中的isEmpty()返回true時。
eg.
該句等同於:
if (userList.isEmpty()) {
...
}
2. logic:notEmpty
該標籤的應用正好和logic:empty標籤相反。
3. logic:equal
該標籤為等於比較符。
eg1. 比較使用者的狀態屬性是否1,若為1,輸出"啟用";
eg2. 如果上例中的value值是動態獲得的,例如需要通過bean:write輸出,因struts不支援標籤巢狀,可採用EL來解決該問題。
4. logic:notEqual
該標籤意義與logic:equal相反,使用方法類似,略。
5. logic:forward
該標籤用於實現頁面導向,查詢配置檔案的全域性forward。struts-config.xml檔案中全域性轉向
eg. <logic:forward name="redirect"/>
6. logic:greaterEqual
為大於等於比較符。
eg. 當某學生的成績大於等於60時,輸出“及格”:
<logic:greaterEqual name="student" property="scores" value="60">
及格
</logic:greaterEqual>
7. logic:greaterThan
此為大於比較符,使用方法同logic:greaterEqual;
8. logic:lessEqual
此為小於等於比較符,使用方法同logic:greaterEqual;
9. logic:lessThan
此為小於比較符,使用方法同logic:greaterEqual;
10. logic:match
此標籤比較物件是否相等;
eg1. 檢查在request範圍內的name屬性是否包含"hello"串:
<logic:match name="name" scope="request" value="hello">
<bean:write name="name"/>中有一個“hello”串。
</logic:match>
eg2. 檢查在request範圍內的name屬性是否已“hello”作為起始字串:
<logic:match name="name" scope="request" value="hello" location="start">
<bean:write name="name"/>以“hello”作為起始字串。
</logic:match>
eg3.
<logic:match header="user-agent" value="Windows">
你執行的是Windows系統
</logic:match>
11. logic:notMatch
此標籤用於比較物件是否不相同,與logic:match意義相反,使用方法類似
12. logic:messagePresent
該標籤用於判斷ActionMessages/ActionErrors物件是否存在;
eg. 如果存在error資訊,將其全部輸出:
<logic:messagePresent property="error">
<html:messages property="error" id="err" >
<bean:write name="err"/>
</html:messages>
</logic:messagePresent >
13. logic:messagesNotPresent
該標籤用於判斷ActionMessages/ActionErrors物件是否不存在,使用方法與logic:messagePresent類似
14. logic:present
此標籤用於判斷request物件傳遞引數是否存在。
eg1. user物件和它的name屬性在request中都存在時,輸出相應字串:
<logic:present name="user" property="name">
user物件和該物件的name屬性都存在
</logic:present>
eg2. 若有一個名字為“hello”的JavaBean,輸出對應字串:
<logic:present name="hello" >
有一個名字為“hello”的JavaBean。
</logic:present>
eg3.
<logic:present header="user-agent">
we got a user-agent header.
</logic:present>
15. logic:notPresent
此標籤用於判斷request物件傳遞引數是否不存在,意義與了logic:present相反,使用方法類似。
16. logic:iterator
用於顯示列表為collection的值(List ,ArrayList,HashMap等)。
eg1. 逐一輸出使用者列表(empList)中使用者的姓名:
<logic:iterate id="emp" name="empList">
<bean:write name="emp" property="name"/><br>
</logic:iterate>
eg2. 從使用者列表中輸出從1開始的兩個使用者的姓名
<logic:iterate id="emp" name="empList" indexId="index" offset="1" length="2">
<bean:write name="index"/>.<bean:write name="emp" property="name"/><br>
</logic:iterate>
eg3. logic:iterator標籤的巢狀舉例
<logic:iterate id="emp" indexId="index" name="empList">
<bean:write name="index"/>. <bean:write name="emp" property="name"/><br>
<logic:iterate id="address" name="emp" property="addressList" length="3" offset="1">
<bean:write name="address"/><br>
</logic:iterate>
</logic:iterate>
17. logic:redirect
該標籤用於實現頁面轉向,可傳遞引數。
eg. <logic:redirect href="http://www.javaeye.com"/>
logic:iterate
logic:iterate標籤用來迭代集合,您可以使用如下方式來為這個標籤指定其要疊代的集合:
使用一個執行時表示式,這個表示式的值是一個集合。
用name屬性引用一個JSP Bean,這個JSP Bean本身就是一個集合。
用name屬性引用一個JSP Bean,這個JSP Bean的一個屬性是一個集合,這時可以聯合使用property來指定這個集合。
上面所提到的集合可以是:
物件型別或原子型別的陣列(Array)。
java.util.Collection的實現,包括ArrayList,Vector。
java.util.Enumeration的實現。
java.util.Iterator的實現。
java.util.Map的實現,包括HashMap,Hashtable和TreeMap。
如果您疊代的集合中含有null的值,這時需要採取一定的措施,因為這時logic:iterate不會在page作用域中建立物件。一般是使用<logic:present>標籤或<logic:notPresent>標籤來判斷一下。
下面是logic:iterate疊代ArrayList的示例的物件引用關係和部分程式碼:
圖示 3. logic:iterate中物件的引用關係
圖中的persons列表是在ListAction中填充的,在這裡只是簡單的加入了三個Person物件,在實際的應用中這些資料應該取自資料庫。具體的程式碼如下:
public ActionForward execute(ActionMapping mapping,ActionForm. form,
HttpServletRequest request, HttpServletResponse response) {
ListForm. listForm. = (ListForm) form;
List<Person> persons = new ArrayList<Person>();
Person person1 = new Person();
person1.setId("00001");
person1.setName("趙辰");
Person person2 = new Person();
person2.setId("00002");
person2.setName("李為芳");
Person person3 = new Person();
person3.setId("00003");
person3.setName("王微");
persons.add(person1);
persons.add(person2);
persons.add(person3);
listForm.setPersons(persons);
return mapping.findForward("success");
}
標籤輸出的結果為:
00001-->趙辰
00002-->李為芳
00003-->王微
回頁首
logic:present
如果指定的值出現該標籤就會建立其標籤體內的內容。該標籤用於以下情況:
檢查具有指定名稱的cookie是否出現。
檢查具有指定名稱的header是否出現。
檢查具有指定名稱的JSP Bean是否出現 或 檢查具有指定名稱的JSP Bean中的property屬性是否出現。
檢查request中指定名稱的引數是否出現。
檢查當前的認證使用者是否與指定的安全形色相關聯。
檢查當前認證的主體是否具有指定的名字。
下面的程式碼示例了logic:present標籤檢查具有指定名稱User-Agent的header是否出現:
<logic:present header="User-Agent">
您的瀏覽器是<bean:header id="userAgent" name="User-Agent"/>
<bean:write name="userAgent"/>。<br/>
</logic:present>
logic:notPresent標籤的應用正好和logic:present標籤相反。
回頁首
logic:messagesPresent
logic:messagesPresent標籤用於以下情況:
在request作用域中存在一個ActionMessages物件,標籤的property屬性和ActionMessages中的property對應。
在request作用域中存在一個ActionErrors物件,標籤的property屬性和ActionErrors中的property對應。
存在一個String物件,將其轉換(構造)成ActionMessage然後在新增到ActionMessages中。
存在一個String Array物件,將陣列中的每一個String轉換成一個ActionMessage,在將其新增到ActionMessages中。
標籤的message屬性值為true時將以Globals.MESSAGE_KEY為key在request作用域中查詢Message,其它情況下,將name的值作為key查詢,如果name 沒有出現,預設值為Globals.ERROR_KEY。
下面的程式碼示例了logic:messagesPresent標籤的典型用法:
<logic:messagesPresent>
<ul>
<html:messages id="message">
<li><bean:write name="message"/></li>
</html:messages>
</ul>
</logic:messagesPresent>
標籤logic:messagesNotPresent的應用正好和logic:messagesPresent的應用相反。
回頁首
logic:empty
logic:empty標籤是用來判斷是否為空的。如果為空,該標籤體中嵌入的內容就會被處理。該標籤用於以下情況:
當Java物件為null時
當String物件為""時
當java.util.Collection物件中的isEmpty()返回true時
當java.util.Map物件中的isEmpty()返回true時
下面的程式碼示例了logic:empty標籤判斷集合persons是否為空:
<logic:empty name="listForm" property = "persons">
<div>集合persons為空!</div>
</logic:empty>
logic:notEmpty標籤的應用正好和logic:empty標籤相反。
回頁首
logic:match
logic:match標籤用來處理子串匹配問題。
如果指定的值匹配該標籤就會建立其標籤體內的內容。該標籤用於以下情況:
檢查具有指定名稱的cookie是否與該標籤的value匹配。
檢查具有指定名稱的header是否與該標籤的value匹配。
檢查具有指定名稱的JSP Bean是否與該標籤的value匹配 或 檢查具有指定名稱的JSP Bean中的property屬性值是否與該標籤的value匹配。
檢查request中指定名稱的引數值是否與該標籤的value匹配。
下面的程式碼示例了logic:match標籤的典型用法:
<logic:present header="User-Agent">
<logic:match header="User-Agent" value="MSIE 6.0">
MS IE 6.0
</logic:match>
</logic:present>
logic:notMatch標籤的應用正好和logic:match標籤相反。
回頁首
logic:equal
這裡要介紹的不只是logic:equal(=)標籤,而是要介紹一類標籤,這類標籤完成比較運算,包括:
logic:equal(=)
logic:notEqual(!=)
logic:greaterEqual(>=)
logic:lessEqual(<=)
logic:graterThan(>)
logic:lessThan(<)
該類標籤的用法類似,我們只介紹logic:equal標籤,其它的留給您自己去完成。
logic:equal是用來判斷是否相等的。如果相等,該標籤體中嵌入的內容就會被處理。該標籤用於以下情況:
比較由該標籤的cookie屬性指定的cookie的值是否與該標籤的value屬性值相等。
比較由該標籤的header屬性指定的header的值是否與該標籤的value屬性值相等。
比較由該標籤的name屬性指定的JSP Bean是否與該標籤的value屬性值相等(property屬性不出現)或比較由該標籤的name屬性指定的JSP Bean中的property屬性值是否與該標籤的value屬性值相等。
比較由該標籤的parameter屬性指定的引數值(request中)是否與該標籤的value屬性值相等。
回頁首
logic:forward
我覺得將forward和redirect這兩個動作放到一起對比著介紹更加有利於理解,基於此原因也就將logic:forward和logic:redirect這兩個標籤也拿到這裡一起介紹了。
讓我們看看這兩個動作的區別:
forward是在servlet內部執行,瀏覽器完全不會感知到這個動作,原始的url也不會改變,瀏覽器重新裝載的話也只是對原始的請求進行簡單的重複。
redirect則分成兩個步驟:第一步是web應用程式告訴瀏覽器第二個url,然後瀏覽器向第二個url傳送請求。
redirect比forward慢,因為瀏覽器要做二次請求。還有就是要注意,在第一次的請求作用域(request作用域)內的bean對於第二次請求是不可見的。
理解了上面描述的區別也就知道了什麼時候該選用logic:forward標籤什麼時候該選用logic:redirect標籤了。logic:forward標籤完成PageContext.forward()或HttpServletResponse.sendRedirect(),如何選擇由控制器決定。logic:redirect標籤完成HttpServletResponse.sendRedirect()。
在使用logic:redirect標籤時我們可以向使用html:link一樣構造baseurl和query引數。如果您感興趣可以參考html:link標籤。
<s:action>標籤的用法
(2012-09-27 18:04:34)
轉載▼
標籤:
<saction>
struts2
雜談
分類: struts2
使用action標籤,可以允許在jsp頁面中直接呼叫Action,在呼叫Action時候,可以指定需要被呼叫的Action的name和namespace.如果指定了executeResult引數的屬性值為true,該標籤會把Action的處理結果(檢視資源)包含到本頁面中. 使用action標籤指定屬性有:
id: 可選屬性,作為該Action的引用ID
name:必選屬性,指定呼叫Action
namespace:可選屬性,指定該標籤呼叫Action所屬namespace
executeResult:可選屬性,指定是否將Action的處理結果包含到本頁面中.預設值為false,不包含.
ignoreContextParam:可選引數,指定該頁面的請求引數是否需要傳入呼叫的Action中,預設值是false,即傳入引數.
<s:action name="login" executeResult="true" namespace="/"></s:action>
傳遞引數
<s:action name="actinName" executeResult="true" namespace="/">
<s:param name="currentPage" value="傳遞的值"></s:param>
</s:action>
<s:param ></s:param>是以request方式的值的,而不是以引數傳值
所以request.getParameter("")會獲取不到值
通過request.getAttribute("")方式可以獲取
另外:使用<s:param ></s:param> value指代的是action定義的物件的名稱,而不是一個值
和 <s:textfield>中的name是一個意思,所以要要傳遞字串的不能把值寫value中而應該寫到
<s:param >寫到這裡</s:param>
例如:
struts.xml如下配置
<package name="reportList" namespace="/reportList" extends="default">
<action name="tab_*" action="xxxx" method="{1}"
<result></result>
</action>
</package>
頁面載入如下段
<s:action na
me="tab_gotoHeader" namespace="/reportList" executeResult="true">
<s:param name="headerMap" value="headerMap"></s:param>
<s:param name="scopeId" value="1"></s:param>
<s:param name="reportRemark" value="indicator.concept"></s:param>
<s:param name="headerMap['lbName']" value="indicator.description"></s:param>
</s:action>
xxx.action中只要set,get headerMap,scopeId就可以拿到值了