struts2中的s标签解析
生活随笔
收集整理的這篇文章主要介紹了
struts2中的s标签解析
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
那就從簡(jiǎn)單的標(biāo)簽說(shuō)起吧!1.x中常用的標(biāo)簽只有4中html、bean、logic、tiles
而struts2.0里的標(biāo)簽卻沒(méi)有分類(lèi),只用在jsp頭文件加上 ??
<%@ taglib prefix="s" uri="/struts-tags" %> ? 就能使用struts2.0的標(biāo)簽庫(kù) ??
下面就介紹每個(gè)標(biāo)簽的具體應(yīng)用實(shí)例說(shuō)明:按字母排列
A: ??
1. ??
2. <s:a href=""></s:a>-----超鏈接,類(lèi)似于html里的<a></a> ??
3. <s:action name=""></s:action>-----執(zhí)行一個(gè)view里面的一個(gè)action ??
4. <s:actionerror/>-----如果action的errors有值那么顯示出來(lái) ??
5. <s:actionmessage/>-----如果action的message有值那么顯示出來(lái) ??
6. <s:append></s:append>-----添加一個(gè)值到list,類(lèi)似于list.add(); ??
7. <s:autocompleter></s:autocompleter>-----自動(dòng)完成<s:combobox>標(biāo)簽的內(nèi)容,這個(gè)是ajax ??
B: ??
1. <s:bean name=""></s:bean>-----類(lèi)似于struts1.x中的,JavaBean的值 ??
C: ??
1. <s:checkbox></s:checkbox>-----復(fù)選框 ??
2. <s:checkboxlist list=""></s:checkboxlist>-----多選框 ??
3. <s:combobox list=""></s:combobox>-----下拉框 ??
4. <s:component></s:component>-----圖像符號(hào) ??
D: ??
1. <s:date/>-----獲取日期格式 ??
2. <s:datetimepicker></s:datetimepicker>-----日期輸入框 ??
3. <s:debug></s:debug>-----顯示錯(cuò)誤信息 ??
4. <s:div></s:div>-----表示一個(gè)塊,類(lèi)似于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個(gè)標(biāo)簽一起使用,表示條件判斷 ??
F: ??
1. <s:fielderror></s:fielderror>-----顯示文件錯(cuò)誤信息 ??
2. <s:file></s:file>-----文件上傳 ??
3. <s:form action=""></s:form>-----獲取相應(yīng)form的值 ??
G: ??
1. <s:generator separator="" val=""></s:generator>----和<s:iterator>標(biāo)簽一起使用 ??
H: ??
1. <s:head/>-----在<head></head>里使用,表示頭文件結(jié)束 ??
2. <s:hidden></s:hidden>-----隱藏值 ??
I: ??
1. <s:i18n name=""></s:i18n>-----加載資源包到值堆棧 ??
2. <s:include value=""></s:include>-----包含一個(gè)輸出,servlet或jsp頁(yè)面 ??
3. <s:inputtransferselect list=""></s:inputtransferselect>-----獲取form的一個(gè)輸入 ??
4. <s:iterator></s:iterator>-----用于遍歷集合 ??
L: ??
1. <s:label></s:label>-----只讀的標(biāo)簽 ??
M: ??
1. <s:merge></s:merge>-----合并遍歷集合出來(lái)的值 ??
O: ??
1. <s:optgroup></s:optgroup>-----獲取標(biāo)簽組 ??
2. <s:optiontransferselect doubleList="" list="" doubleName=""></s:optiontransferselect>-----左右選擇框 ??
P: ??
1. <s:param></s:param>-----為其他標(biāo)簽提供參數(shù) ?
struts2的s:param標(biāo)簽主要有兩個(gè)屬性name與value, 若想在value屬性中輸入直接量,則可以這樣寫(xiě):<s:param name="some" value="%{'user'}"/>, 也可以這樣寫(xiě):<s:param name="some">user</s:param>。但如果直接賦值,這個(gè)值不是由Action動(dòng)態(tài)生成的,而是自己指定的一個(gè)字符串,則只能用后者
?
2. <s:password></s:password>-----密碼輸入框 ??
3. <s:property/>-----得到'value'的屬性 ??
4. <s:push value=""></s:push>-----value的值push到棧中,從而使property標(biāo)簽的能夠獲取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>-----賦予變量一個(gè)特定范圍內(nèi)的值 ??
3. <s:sort comparator=""></s:sort>-----通過(guò)屬性給list分類(lèi) ??
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>-----樹(shù) ??
8. <s:treenode label=""></s:treenode>-----樹(shù)的結(jié)構(gòu) ??
U: ??
1. <s:updownselect list=""></s:updownselect>-----多選擇框 ??
2. <s:url></s:url>-----創(chuàng)建url
___________________________________________________
struts2框架的標(biāo)簽庫(kù)分為三類(lèi):
用戶(hù)標(biāo)簽:生成HTML元素?
非用戶(hù)標(biāo)簽:數(shù)據(jù)訪問(wèn)、邏輯控制等。?
AJAX標(biāo)簽:支持AJAX技術(shù)。?
用戶(hù)界面標(biāo)簽又分兩類(lèi):
表單標(biāo)簽:生成HTML頁(yè)面的from元素?
非表單標(biāo)簽:生成頁(yè)面上的Tab、Tree等?
非界面標(biāo)簽又分為數(shù)據(jù)訪問(wèn)標(biāo)簽和流程控制標(biāo)簽。
?
控制標(biāo)簽:
if/elseif/else標(biāo)簽:控制流程分支。?
iteratot標(biāo)簽:對(duì)集合屬性迭代(屬性類(lèi)型:List、Map、數(shù)組)。?
append標(biāo)簽:將多個(gè)集合對(duì)象拼接在一起,組成一個(gè)新的集合。將多個(gè)集合使用一個(gè)<iterator/>標(biāo)簽完成迭代。?
generatot標(biāo)簽:將指定的字符串按照規(guī)定的分隔符分解成多個(gè)子字符串。?
merge標(biāo)簽:將多個(gè)集合拼接在一起。?
subset標(biāo)簽:獲取某個(gè)集合的子集合。?
sort標(biāo)簽:多指定的集合元素進(jìn)行排序。?
數(shù)據(jù)標(biāo)簽:
action:直接調(diào)用一個(gè)Action,根據(jù)executeResult參數(shù),可以將Action的處理結(jié)果包含到頁(yè)面中。?
bean:創(chuàng)建一個(gè)JavaBean實(shí)例。。?
date:格式化輸出一個(gè)日期屬性。?
debug:生成一個(gè)調(diào)試鏈接,當(dāng)單擊該鏈接時(shí),可以看到當(dāng)前棧值中的內(nèi)容。?
i18n:指定國(guó)際化資源文件的baseName。?
include:包含其他的頁(yè)面資源。?
param:設(shè)置參數(shù)。?
property:輸出某個(gè)值。可以輸出值棧、StackContext 、ActionContext中的值。?
push:將某個(gè)值放入值棧。?
set:設(shè)置一個(gè)新的變量。?
text:輸出國(guó)際化信息。?
url:生成一個(gè)URL地址。?
表單標(biāo)簽:
checkbox標(biāo)簽:復(fù)選框。?
checkboxlist標(biāo)簽:根據(jù)一個(gè)集合屬性創(chuàng)建一系列的復(fù)選框。?
combobox標(biāo)簽:生成一個(gè)單選文本框和一個(gè)下拉列表框的組合。?
doubleselect標(biāo)簽:生成一個(gè)相互關(guān)聯(lián)的列表框,該標(biāo)簽由兩個(gè)下拉選擇框組成。?
datetimepicker標(biāo)簽:生成一個(gè)日期、時(shí)間下拉列表框。?
head標(biāo)簽:生成HTML頁(yè)面的HEAD部分。?
file標(biāo)簽:在頁(yè)面上生成一個(gè)上傳文件元素。?
hidder標(biāo)簽:生成一個(gè)不看見(jiàn)的用戶(hù)輸入元素。?
select標(biāo)簽:生成下拉列表框。?
optiontransferselect標(biāo)簽:創(chuàng)建兩個(gè)選項(xiàng)以及轉(zhuǎn)移下拉列表項(xiàng),該標(biāo)簽生成兩個(gè)下拉列表框,同時(shí)生成相應(yīng)的按鈕,這些按鈕可以控制選項(xiàng)在兩個(gè)下拉列表之間移動(dòng)、排序。?
radio標(biāo)簽:單選框。?
optgroup標(biāo)簽:生成一個(gè)下拉列表框的選擇組,下拉列表框中可以包含多個(gè)選擇組。?
token標(biāo)簽:防用戶(hù)多次提交表單。?
textarea標(biāo)簽:文本域。?
updownselct標(biāo)簽:支持選項(xiàng)內(nèi)容的上下移動(dòng)。?
password表單:密碼表單域。?
textfield標(biāo)簽:單行文本輸入框。?
非表單標(biāo)簽:
actionerror標(biāo)簽:輸出Action中g(shù)etActionErrors()方法返回的異常信息。?
actionmessage標(biāo)簽:輸出Action中g(shù)etActionErrors()方法返回的信息。?
component標(biāo)簽:生成一個(gè)自定義的組件。?
div標(biāo)簽:AJAX標(biāo)簽,生成一個(gè)div片段。?
fielderror標(biāo)簽:輸出異常提示信息。?
tabbedPanel:AJAX標(biāo)簽,生成HTML中的Tab頁(yè)。?
tree標(biāo)簽:生成一個(gè)樹(shù)形結(jié)構(gòu)。?
treenode標(biāo)簽:生成樹(shù)形結(jié)構(gòu)的節(jié)點(diǎn)。?
____________________________________________________
Struts之LOGIC標(biāo)簽庫(kù)詳解
1. logic:empty?
該標(biāo)簽是用來(lái)判斷是否為空的。如果為空,該標(biāo)簽體中嵌入的內(nèi)容就會(huì)被處理。該標(biāo)簽用于以下情況:?
1)當(dāng)Java對(duì)象為null時(shí);?
2)當(dāng)String對(duì)象為""時(shí);?
3)當(dāng)java.util.Collection對(duì)象中的isEmpty()返回true時(shí);?
4)當(dāng)java.util.Map對(duì)象中的isEmpty()返回true時(shí)。?
eg.?
該句等同于:?
if (userList.isEmpty()) {?
...?
}?
2. logic:notEmpty?
該標(biāo)簽的應(yīng)用正好和logic:empty標(biāo)簽相反。?
3. logic:equal?
該標(biāo)簽為等于比較符。?
eg1. 比較用戶(hù)的狀態(tài)屬性是否1,若為1,輸出"啟用";?
eg2. 如果上例中的value值是動(dòng)態(tài)獲得的,例如需要通過(guò)bean:write輸出,因struts不支持標(biāo)簽嵌套,可采用EL來(lái)解決該問(wèn)題。?
4. logic:notEqual?
該標(biāo)簽意義與logic:equal相反,使用方法類(lèi)似,略。?
5. logic:forward?
該標(biāo)簽用于實(shí)現(xiàn)頁(yè)面導(dǎo)向,查找配置文件的全局forward。struts-config.xml文件中全局轉(zhuǎn)向?
eg. <logic:forward name="redirect"/>?
6. logic:greaterEqual?
為大于等于比較符。?
eg. 當(dāng)某學(xué)生的成績(jī)大于等于60時(shí),輸出“及格”:?
<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?
此標(biāo)簽比較對(duì)象是否相等;?
eg1. 檢查在request范圍內(nèi)的name屬性是否包含"hello"串:?
<logic:match name="name" scope="request" value="hello">?
<bean:write name="name"/>中有一個(gè)“hello”串。?
</logic:match>?
eg2. 檢查在request范圍內(nèi)的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">?
你運(yùn)行的是Windows系統(tǒng)?
</logic:match>?
11. logic:notMatch?
此標(biāo)簽用于比較對(duì)象是否不相同,與logic:match意義相反,使用方法類(lèi)似?
12. logic:messagePresent?
該標(biāo)簽用于判斷ActionMessages/ActionErrors對(duì)象是否存在;?
eg. 如果存在error信息,將其全部輸出:?
<logic:messagePresent property="error">?
<html:messages property="error" id="err" >?
<bean:write name="err"/>?
</html:messages>?
</logic:messagePresent >?
13. logic:messagesNotPresent?
該標(biāo)簽用于判斷ActionMessages/ActionErrors對(duì)象是否不存在,使用方法與logic:messagePresent類(lèi)似?
14. logic:present?
此標(biāo)簽用于判斷request對(duì)象傳遞參數(shù)是否存在。?
eg1. user對(duì)象和它的name屬性在request中都存在時(shí),輸出相應(yīng)字符串:?
<logic:present name="user" property="name">?
user對(duì)象和該對(duì)象的name屬性都存在?
</logic:present>?
eg2. 若有一個(gè)名字為“hello”的JavaBean,輸出對(duì)應(yīng)字符串:?
<logic:present name="hello" >?
有一個(gè)名字為“hello”的JavaBean。?
</logic:present>?
eg3.?
<logic:present header="user-agent">?
we got a user-agent header.?
</logic:present>?
15. logic:notPresent?
此標(biāo)簽用于判斷request對(duì)象傳遞參數(shù)是否不存在,意義與了logic:present相反,使用方法類(lèi)似。?
16. logic:iterator?
用于顯示列表為collection的值(List ,ArrayList,HashMap等)。?
eg1. 逐一輸出用戶(hù)列表(empList)中用戶(hù)的姓名:?
<logic:iterate id="emp" name="empList">?
<bean:write name="emp" property="name"/><br>?
</logic:iterate>?
eg2. 從用戶(hù)列表中輸出從1開(kāi)始的兩個(gè)用戶(hù)的姓名?
<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標(biāo)簽的嵌套舉例?
<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?
該標(biāo)簽用于實(shí)現(xiàn)頁(yè)面轉(zhuǎn)向,可傳遞參數(shù)。?
eg. <logic:redirect href="http://www.javaeye.com"/>
logic:iterate?
logic:iterate標(biāo)簽用來(lái)迭代集合,您可以使用如下方式來(lái)為這個(gè)標(biāo)簽指定其要疊代的集合:
使用一個(gè)運(yùn)行時(shí)表達(dá)式,這個(gè)表達(dá)式的值是一個(gè)集合。?
用name屬性引用一個(gè)JSP Bean,這個(gè)JSP Bean本身就是一個(gè)集合。?
用name屬性引用一個(gè)JSP Bean,這個(gè)JSP Bean的一個(gè)屬性是一個(gè)集合,這時(shí)可以聯(lián)合使用property來(lái)指定這個(gè)集合。?
上面所提到的集合可以是:
對(duì)象類(lèi)型或原子類(lèi)型的數(shù)組(Array)。?
java.util.Collection的實(shí)現(xiàn),包括ArrayList,Vector。?
java.util.Enumeration的實(shí)現(xiàn)。?
java.util.Iterator的實(shí)現(xiàn)。?
java.util.Map的實(shí)現(xiàn),包括HashMap,Hashtable和TreeMap。?
如果您疊代的集合中含有null的值,這時(shí)需要采取一定的措施,因?yàn)檫@時(shí)logic:iterate不會(huì)在page作用域中創(chuàng)建對(duì)象。一般是使用<logic:present>標(biāo)簽或<logic:notPresent>標(biāo)簽來(lái)判斷一下。
下面是logic:iterate疊代ArrayList的示例的對(duì)象引用關(guān)系和部分代碼:
圖示 3. logic:iterate中對(duì)象的引用關(guān)系
圖中的persons列表是在ListAction中填充的,在這里只是簡(jiǎn)單的加入了三個(gè)Person對(duì)象,在實(shí)際的應(yīng)用中這些數(shù)據(jù)應(yīng)該取自數(shù)據(jù)庫(kù)。具體的代碼如下:
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");
}
標(biāo)簽輸出的結(jié)果為:
00001-->趙辰?
00002-->李為芳?
00003-->王微
回頁(yè)首?
logic:present?
如果指定的值出現(xiàn)該標(biāo)簽就會(huì)創(chuàng)建其標(biāo)簽體內(nèi)的內(nèi)容。該標(biāo)簽用于以下情況:
檢查具有指定名稱(chēng)的cookie是否出現(xiàn)。?
檢查具有指定名稱(chēng)的header是否出現(xiàn)。?
檢查具有指定名稱(chēng)的JSP Bean是否出現(xiàn) 或 檢查具有指定名稱(chēng)的JSP Bean中的property屬性是否出現(xiàn)。?
檢查request中指定名稱(chēng)的參數(shù)是否出現(xiàn)。?
檢查當(dāng)前的認(rèn)證用戶(hù)是否與指定的安全角色相關(guān)聯(lián)。?
檢查當(dāng)前認(rèn)證的主體是否具有指定的名字。?
下面的代碼示例了logic:present標(biāo)簽檢查具有指定名稱(chēng)User-Agent的header是否出現(xiàn):
<logic:present header="User-Agent">
您的瀏覽器是<bean:header id="userAgent" name="User-Agent"/>
? ? <bean:write name="userAgent"/>。<br/>
</logic:present>
logic:notPresent標(biāo)簽的應(yīng)用正好和logic:present標(biāo)簽相反。
回頁(yè)首?
logic:messagesPresent?
logic:messagesPresent標(biāo)簽用于以下情況:
在request作用域中存在一個(gè)ActionMessages對(duì)象,標(biāo)簽的property屬性和ActionMessages中的property對(duì)應(yīng)。?
在request作用域中存在一個(gè)ActionErrors對(duì)象,標(biāo)簽的property屬性和ActionErrors中的property對(duì)應(yīng)。?
存在一個(gè)String對(duì)象,將其轉(zhuǎn)換(構(gòu)造)成ActionMessage然后在添加到ActionMessages中。?
存在一個(gè)String Array對(duì)象,將數(shù)組中的每一個(gè)String轉(zhuǎn)換成一個(gè)ActionMessage,在將其添加到ActionMessages中。?
標(biāo)簽的message屬性值為true時(shí)將以Globals.MESSAGE_KEY為key在request作用域中查找Message,其它情況下,將name的值作為key查找,如果name 沒(méi)有出現(xiàn),默認(rèn)值為Globals.ERROR_KEY。?
下面的代碼示例了logic:messagesPresent標(biāo)簽的典型用法:
<logic:messagesPresent>
<ul>
<html:messages id="message">
? ? <li><bean:write name="message"/></li>
</html:messages>
</ul>
</logic:messagesPresent> ?
標(biāo)簽logic:messagesNotPresent的應(yīng)用正好和logic:messagesPresent的應(yīng)用相反。
回頁(yè)首?
logic:empty?
logic:empty標(biāo)簽是用來(lái)判斷是否為空的。如果為空,該標(biāo)簽體中嵌入的內(nèi)容就會(huì)被處理。該標(biāo)簽用于以下情況:
當(dāng)Java對(duì)象為null時(shí)?
當(dāng)String對(duì)象為""時(shí)?
當(dāng)java.util.Collection對(duì)象中的isEmpty()返回true時(shí)?
當(dāng)java.util.Map對(duì)象中的isEmpty()返回true時(shí)?
下面的代碼示例了logic:empty標(biāo)簽判斷集合persons是否為空:
<logic:empty name="listForm" property = "persons">
<div>集合persons為空!</div> ? ? ?
</logic:empty> ??
logic:notEmpty標(biāo)簽的應(yīng)用正好和logic:empty標(biāo)簽相反。
回頁(yè)首?
logic:match?
logic:match標(biāo)簽用來(lái)處理子串匹配問(wèn)題。
如果指定的值匹配該標(biāo)簽就會(huì)創(chuàng)建其標(biāo)簽體內(nèi)的內(nèi)容。該標(biāo)簽用于以下情況:?
檢查具有指定名稱(chēng)的cookie是否與該標(biāo)簽的value匹配。?
檢查具有指定名稱(chēng)的header是否與該標(biāo)簽的value匹配。?
檢查具有指定名稱(chēng)的JSP Bean是否與該標(biāo)簽的value匹配 或 檢查具有指定名稱(chēng)的JSP Bean中的property屬性值是否與該標(biāo)簽的value匹配。?
檢查request中指定名稱(chēng)的參數(shù)值是否與該標(biāo)簽的value匹配。?
下面的代碼示例了logic:match標(biāo)簽的典型用法:
<logic:present header="User-Agent">
<logic:match header="User-Agent" value="MSIE 6.0">
? ? MS IE 6.0
</logic:match>
</logic:present> ??
logic:notMatch標(biāo)簽的應(yīng)用正好和logic:match標(biāo)簽相反。
回頁(yè)首?
logic:equal?
這里要介紹的不只是logic:equal(=)標(biāo)簽,而是要介紹一類(lèi)標(biāo)簽,這類(lèi)標(biāo)簽完成比較運(yùn)算,包括:
logic:equal(=)?
logic:notEqual(!=)?
logic:greaterEqual(>=)?
logic:lessEqual(<=)?
logic:graterThan(>)?
logic:lessThan(<)?
該類(lèi)標(biāo)簽的用法類(lèi)似,我們只介紹logic:equal標(biāo)簽,其它的留給您自己去完成。
logic:equal是用來(lái)判斷是否相等的。如果相等,該標(biāo)簽體中嵌入的內(nèi)容就會(huì)被處理。該標(biāo)簽用于以下情況:
比較由該標(biāo)簽的cookie屬性指定的cookie的值是否與該標(biāo)簽的value屬性值相等。?
比較由該標(biāo)簽的header屬性指定的header的值是否與該標(biāo)簽的value屬性值相等。?
比較由該標(biāo)簽的name屬性指定的JSP Bean是否與該標(biāo)簽的value屬性值相等(property屬性不出現(xiàn))或比較由該標(biāo)簽的name屬性指定的JSP Bean中的property屬性值是否與該標(biāo)簽的value屬性值相等。?
比較由該標(biāo)簽的parameter屬性指定的參數(shù)值(request中)是否與該標(biāo)簽的value屬性值相等。?
回頁(yè)首?
logic:forward?
我覺(jué)得將forward和redirect這兩個(gè)動(dòng)作放到一起對(duì)比著介紹更加有利于理解,基于此原因也就將logic:forward和logic:redirect這兩個(gè)標(biāo)簽也拿到這里一起介紹了。
讓我們看看這兩個(gè)動(dòng)作的區(qū)別:?
forward是在servlet內(nèi)部執(zhí)行,瀏覽器完全不會(huì)感知到這個(gè)動(dòng)作,原始的url也不會(huì)改變,瀏覽器重新裝載的話也只是對(duì)原始的請(qǐng)求進(jìn)行簡(jiǎn)單的重復(fù)。?
redirect則分成兩個(gè)步驟:第一步是web應(yīng)用程序告訴瀏覽器第二個(gè)url,然后瀏覽器向第二個(gè)url發(fā)送請(qǐng)求。?
redirect比f(wàn)orward慢,因?yàn)闉g覽器要做二次請(qǐng)求。還有就是要注意,在第一次的請(qǐng)求作用域(request作用域)內(nèi)的bean對(duì)于第二次請(qǐng)求是不可見(jiàn)的。
理解了上面描述的區(qū)別也就知道了什么時(shí)候該選用logic:forward標(biāo)簽什么時(shí)候該選用logic:redirect標(biāo)簽了。logic:forward標(biāo)簽完成PageContext.forward()或HttpServletResponse.sendRedirect(),如何選擇由控制器決定。logic:redirect標(biāo)簽完成HttpServletResponse.sendRedirect()。
在使用logic:redirect標(biāo)簽時(shí)我們可以向使用html:link一樣構(gòu)造baseurl和query參數(shù)。如果您感興趣可以參考html:link標(biāo)簽。
<s:action>標(biāo)簽的用法
(2012-09-27 18:04:34)
轉(zhuǎn)載▼
標(biāo)簽:
<saction>
struts2
雜談
分類(lèi): struts2
使用action標(biāo)簽,可以允許在jsp頁(yè)面中直接調(diào)用Action,在調(diào)用Action時(shí)候,可以指定需要被調(diào)用的Action的name和namespace.如果指定了executeResult參數(shù)的屬性值為true,該標(biāo)簽會(huì)把Action的處理結(jié)果(視圖資源)包含到本頁(yè)面中. 使用action標(biāo)簽指定屬性有:?
id: 可選屬性,作為該Action的引用ID ? ?
? ?
name:必選屬性,指定調(diào)用Action ? ?
? ?
namespace:可選屬性,指定該標(biāo)簽調(diào)用Action所屬namespace ? ?
? ?
executeResult:可選屬性,指定是否將Action的處理結(jié)果包含到本頁(yè)面中.默認(rèn)值為false,不包含. ? ?
? ?
ignoreContextParam:可選參數(shù),指定該頁(yè)面的請(qǐng)求參數(shù)是否需要傳入調(diào)用的Action中,默認(rèn)值是false,即傳入?yún)?shù).?
?<s:action name="login" executeResult="true" namespace="/"></s:action> ?
傳遞參數(shù)?
? ?<s:action name="actinName" executeResult="true" namespace="/">?
? ? <s:param name="currentPage" value="傳遞的值"></s:param>?
? ?</s:action>?
<s:param ></s:param>是以request方式的值的,而不是以參數(shù)傳值 ?
所以request.getParameter("")會(huì)獲取不到值?
通過(guò)request.getAttribute("")方式可以獲取?
另外:使用<s:param ></s:param> value指代的是action定義的對(duì)象的名稱(chēng),而不是一個(gè)值?
和 <s:textfield>中的name是一個(gè)意思,所以要要傳遞字符串的不能把值寫(xiě)value中而應(yīng)該寫(xiě)到?
<s:param >寫(xiě)到這里</s:param>?
例如:?
struts.xml如下配置?
<package name="reportList" namespace="/reportList" extends="default">?
<action name="tab_*" action="xxxx" method="{1}"?
<result></result>?
</action>?
</package>?
頁(yè)面加載如下段?
<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里的標(biāo)簽卻沒(méi)有分類(lèi),只用在jsp頭文件加上 ??
<%@ taglib prefix="s" uri="/struts-tags" %> ? 就能使用struts2.0的標(biāo)簽庫(kù) ??
下面就介紹每個(gè)標(biāo)簽的具體應(yīng)用實(shí)例說(shuō)明:按字母排列
A: ??
1. ??
2. <s:a href=""></s:a>-----超鏈接,類(lèi)似于html里的<a></a> ??
3. <s:action name=""></s:action>-----執(zhí)行一個(gè)view里面的一個(gè)action ??
4. <s:actionerror/>-----如果action的errors有值那么顯示出來(lái) ??
5. <s:actionmessage/>-----如果action的message有值那么顯示出來(lái) ??
6. <s:append></s:append>-----添加一個(gè)值到list,類(lèi)似于list.add(); ??
7. <s:autocompleter></s:autocompleter>-----自動(dòng)完成<s:combobox>標(biāo)簽的內(nèi)容,這個(gè)是ajax ??
B: ??
1. <s:bean name=""></s:bean>-----類(lèi)似于struts1.x中的,JavaBean的值 ??
C: ??
1. <s:checkbox></s:checkbox>-----復(fù)選框 ??
2. <s:checkboxlist list=""></s:checkboxlist>-----多選框 ??
3. <s:combobox list=""></s:combobox>-----下拉框 ??
4. <s:component></s:component>-----圖像符號(hào) ??
D: ??
1. <s:date/>-----獲取日期格式 ??
2. <s:datetimepicker></s:datetimepicker>-----日期輸入框 ??
3. <s:debug></s:debug>-----顯示錯(cuò)誤信息 ??
4. <s:div></s:div>-----表示一個(gè)塊,類(lèi)似于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個(gè)標(biāo)簽一起使用,表示條件判斷 ??
F: ??
1. <s:fielderror></s:fielderror>-----顯示文件錯(cuò)誤信息 ??
2. <s:file></s:file>-----文件上傳 ??
3. <s:form action=""></s:form>-----獲取相應(yīng)form的值 ??
G: ??
1. <s:generator separator="" val=""></s:generator>----和<s:iterator>標(biāo)簽一起使用 ??
H: ??
1. <s:head/>-----在<head></head>里使用,表示頭文件結(jié)束 ??
2. <s:hidden></s:hidden>-----隱藏值 ??
I: ??
1. <s:i18n name=""></s:i18n>-----加載資源包到值堆棧 ??
2. <s:include value=""></s:include>-----包含一個(gè)輸出,servlet或jsp頁(yè)面 ??
3. <s:inputtransferselect list=""></s:inputtransferselect>-----獲取form的一個(gè)輸入 ??
4. <s:iterator></s:iterator>-----用于遍歷集合 ??
L: ??
1. <s:label></s:label>-----只讀的標(biāo)簽 ??
M: ??
1. <s:merge></s:merge>-----合并遍歷集合出來(lái)的值 ??
O: ??
1. <s:optgroup></s:optgroup>-----獲取標(biāo)簽組 ??
2. <s:optiontransferselect doubleList="" list="" doubleName=""></s:optiontransferselect>-----左右選擇框 ??
P: ??
1. <s:param></s:param>-----為其他標(biāo)簽提供參數(shù) ?
struts2的s:param標(biāo)簽主要有兩個(gè)屬性name與value, 若想在value屬性中輸入直接量,則可以這樣寫(xiě):<s:param name="some" value="%{'user'}"/>, 也可以這樣寫(xiě):<s:param name="some">user</s:param>。但如果直接賦值,這個(gè)值不是由Action動(dòng)態(tài)生成的,而是自己指定的一個(gè)字符串,則只能用后者
?
2. <s:password></s:password>-----密碼輸入框 ??
3. <s:property/>-----得到'value'的屬性 ??
4. <s:push value=""></s:push>-----value的值push到棧中,從而使property標(biāo)簽的能夠獲取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>-----賦予變量一個(gè)特定范圍內(nèi)的值 ??
3. <s:sort comparator=""></s:sort>-----通過(guò)屬性給list分類(lèi) ??
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>-----樹(shù) ??
8. <s:treenode label=""></s:treenode>-----樹(shù)的結(jié)構(gòu) ??
U: ??
1. <s:updownselect list=""></s:updownselect>-----多選擇框 ??
2. <s:url></s:url>-----創(chuàng)建url
___________________________________________________
struts2框架的標(biāo)簽庫(kù)分為三類(lèi):
用戶(hù)標(biāo)簽:生成HTML元素?
非用戶(hù)標(biāo)簽:數(shù)據(jù)訪問(wèn)、邏輯控制等。?
AJAX標(biāo)簽:支持AJAX技術(shù)。?
用戶(hù)界面標(biāo)簽又分兩類(lèi):
表單標(biāo)簽:生成HTML頁(yè)面的from元素?
非表單標(biāo)簽:生成頁(yè)面上的Tab、Tree等?
非界面標(biāo)簽又分為數(shù)據(jù)訪問(wèn)標(biāo)簽和流程控制標(biāo)簽。
?
控制標(biāo)簽:
if/elseif/else標(biāo)簽:控制流程分支。?
iteratot標(biāo)簽:對(duì)集合屬性迭代(屬性類(lèi)型:List、Map、數(shù)組)。?
append標(biāo)簽:將多個(gè)集合對(duì)象拼接在一起,組成一個(gè)新的集合。將多個(gè)集合使用一個(gè)<iterator/>標(biāo)簽完成迭代。?
generatot標(biāo)簽:將指定的字符串按照規(guī)定的分隔符分解成多個(gè)子字符串。?
merge標(biāo)簽:將多個(gè)集合拼接在一起。?
subset標(biāo)簽:獲取某個(gè)集合的子集合。?
sort標(biāo)簽:多指定的集合元素進(jìn)行排序。?
數(shù)據(jù)標(biāo)簽:
action:直接調(diào)用一個(gè)Action,根據(jù)executeResult參數(shù),可以將Action的處理結(jié)果包含到頁(yè)面中。?
bean:創(chuàng)建一個(gè)JavaBean實(shí)例。。?
date:格式化輸出一個(gè)日期屬性。?
debug:生成一個(gè)調(diào)試鏈接,當(dāng)單擊該鏈接時(shí),可以看到當(dāng)前棧值中的內(nèi)容。?
i18n:指定國(guó)際化資源文件的baseName。?
include:包含其他的頁(yè)面資源。?
param:設(shè)置參數(shù)。?
property:輸出某個(gè)值。可以輸出值棧、StackContext 、ActionContext中的值。?
push:將某個(gè)值放入值棧。?
set:設(shè)置一個(gè)新的變量。?
text:輸出國(guó)際化信息。?
url:生成一個(gè)URL地址。?
表單標(biāo)簽:
checkbox標(biāo)簽:復(fù)選框。?
checkboxlist標(biāo)簽:根據(jù)一個(gè)集合屬性創(chuàng)建一系列的復(fù)選框。?
combobox標(biāo)簽:生成一個(gè)單選文本框和一個(gè)下拉列表框的組合。?
doubleselect標(biāo)簽:生成一個(gè)相互關(guān)聯(lián)的列表框,該標(biāo)簽由兩個(gè)下拉選擇框組成。?
datetimepicker標(biāo)簽:生成一個(gè)日期、時(shí)間下拉列表框。?
head標(biāo)簽:生成HTML頁(yè)面的HEAD部分。?
file標(biāo)簽:在頁(yè)面上生成一個(gè)上傳文件元素。?
hidder標(biāo)簽:生成一個(gè)不看見(jiàn)的用戶(hù)輸入元素。?
select標(biāo)簽:生成下拉列表框。?
optiontransferselect標(biāo)簽:創(chuàng)建兩個(gè)選項(xiàng)以及轉(zhuǎn)移下拉列表項(xiàng),該標(biāo)簽生成兩個(gè)下拉列表框,同時(shí)生成相應(yīng)的按鈕,這些按鈕可以控制選項(xiàng)在兩個(gè)下拉列表之間移動(dòng)、排序。?
radio標(biāo)簽:單選框。?
optgroup標(biāo)簽:生成一個(gè)下拉列表框的選擇組,下拉列表框中可以包含多個(gè)選擇組。?
token標(biāo)簽:防用戶(hù)多次提交表單。?
textarea標(biāo)簽:文本域。?
updownselct標(biāo)簽:支持選項(xiàng)內(nèi)容的上下移動(dòng)。?
password表單:密碼表單域。?
textfield標(biāo)簽:單行文本輸入框。?
非表單標(biāo)簽:
actionerror標(biāo)簽:輸出Action中g(shù)etActionErrors()方法返回的異常信息。?
actionmessage標(biāo)簽:輸出Action中g(shù)etActionErrors()方法返回的信息。?
component標(biāo)簽:生成一個(gè)自定義的組件。?
div標(biāo)簽:AJAX標(biāo)簽,生成一個(gè)div片段。?
fielderror標(biāo)簽:輸出異常提示信息。?
tabbedPanel:AJAX標(biāo)簽,生成HTML中的Tab頁(yè)。?
tree標(biāo)簽:生成一個(gè)樹(shù)形結(jié)構(gòu)。?
treenode標(biāo)簽:生成樹(shù)形結(jié)構(gòu)的節(jié)點(diǎn)。?
____________________________________________________
Struts之LOGIC標(biāo)簽庫(kù)詳解
1. logic:empty?
該標(biāo)簽是用來(lái)判斷是否為空的。如果為空,該標(biāo)簽體中嵌入的內(nèi)容就會(huì)被處理。該標(biāo)簽用于以下情況:?
1)當(dāng)Java對(duì)象為null時(shí);?
2)當(dāng)String對(duì)象為""時(shí);?
3)當(dāng)java.util.Collection對(duì)象中的isEmpty()返回true時(shí);?
4)當(dāng)java.util.Map對(duì)象中的isEmpty()返回true時(shí)。?
eg.?
該句等同于:?
if (userList.isEmpty()) {?
...?
}?
2. logic:notEmpty?
該標(biāo)簽的應(yīng)用正好和logic:empty標(biāo)簽相反。?
3. logic:equal?
該標(biāo)簽為等于比較符。?
eg1. 比較用戶(hù)的狀態(tài)屬性是否1,若為1,輸出"啟用";?
eg2. 如果上例中的value值是動(dòng)態(tài)獲得的,例如需要通過(guò)bean:write輸出,因struts不支持標(biāo)簽嵌套,可采用EL來(lái)解決該問(wèn)題。?
4. logic:notEqual?
該標(biāo)簽意義與logic:equal相反,使用方法類(lèi)似,略。?
5. logic:forward?
該標(biāo)簽用于實(shí)現(xiàn)頁(yè)面導(dǎo)向,查找配置文件的全局forward。struts-config.xml文件中全局轉(zhuǎn)向?
eg. <logic:forward name="redirect"/>?
6. logic:greaterEqual?
為大于等于比較符。?
eg. 當(dāng)某學(xué)生的成績(jī)大于等于60時(shí),輸出“及格”:?
<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?
此標(biāo)簽比較對(duì)象是否相等;?
eg1. 檢查在request范圍內(nèi)的name屬性是否包含"hello"串:?
<logic:match name="name" scope="request" value="hello">?
<bean:write name="name"/>中有一個(gè)“hello”串。?
</logic:match>?
eg2. 檢查在request范圍內(nèi)的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">?
你運(yùn)行的是Windows系統(tǒng)?
</logic:match>?
11. logic:notMatch?
此標(biāo)簽用于比較對(duì)象是否不相同,與logic:match意義相反,使用方法類(lèi)似?
12. logic:messagePresent?
該標(biāo)簽用于判斷ActionMessages/ActionErrors對(duì)象是否存在;?
eg. 如果存在error信息,將其全部輸出:?
<logic:messagePresent property="error">?
<html:messages property="error" id="err" >?
<bean:write name="err"/>?
</html:messages>?
</logic:messagePresent >?
13. logic:messagesNotPresent?
該標(biāo)簽用于判斷ActionMessages/ActionErrors對(duì)象是否不存在,使用方法與logic:messagePresent類(lèi)似?
14. logic:present?
此標(biāo)簽用于判斷request對(duì)象傳遞參數(shù)是否存在。?
eg1. user對(duì)象和它的name屬性在request中都存在時(shí),輸出相應(yīng)字符串:?
<logic:present name="user" property="name">?
user對(duì)象和該對(duì)象的name屬性都存在?
</logic:present>?
eg2. 若有一個(gè)名字為“hello”的JavaBean,輸出對(duì)應(yīng)字符串:?
<logic:present name="hello" >?
有一個(gè)名字為“hello”的JavaBean。?
</logic:present>?
eg3.?
<logic:present header="user-agent">?
we got a user-agent header.?
</logic:present>?
15. logic:notPresent?
此標(biāo)簽用于判斷request對(duì)象傳遞參數(shù)是否不存在,意義與了logic:present相反,使用方法類(lèi)似。?
16. logic:iterator?
用于顯示列表為collection的值(List ,ArrayList,HashMap等)。?
eg1. 逐一輸出用戶(hù)列表(empList)中用戶(hù)的姓名:?
<logic:iterate id="emp" name="empList">?
<bean:write name="emp" property="name"/><br>?
</logic:iterate>?
eg2. 從用戶(hù)列表中輸出從1開(kāi)始的兩個(gè)用戶(hù)的姓名?
<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標(biāo)簽的嵌套舉例?
<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?
該標(biāo)簽用于實(shí)現(xiàn)頁(yè)面轉(zhuǎn)向,可傳遞參數(shù)。?
eg. <logic:redirect href="http://www.javaeye.com"/>
logic:iterate?
logic:iterate標(biāo)簽用來(lái)迭代集合,您可以使用如下方式來(lái)為這個(gè)標(biāo)簽指定其要疊代的集合:
使用一個(gè)運(yùn)行時(shí)表達(dá)式,這個(gè)表達(dá)式的值是一個(gè)集合。?
用name屬性引用一個(gè)JSP Bean,這個(gè)JSP Bean本身就是一個(gè)集合。?
用name屬性引用一個(gè)JSP Bean,這個(gè)JSP Bean的一個(gè)屬性是一個(gè)集合,這時(shí)可以聯(lián)合使用property來(lái)指定這個(gè)集合。?
上面所提到的集合可以是:
對(duì)象類(lèi)型或原子類(lèi)型的數(shù)組(Array)。?
java.util.Collection的實(shí)現(xiàn),包括ArrayList,Vector。?
java.util.Enumeration的實(shí)現(xiàn)。?
java.util.Iterator的實(shí)現(xiàn)。?
java.util.Map的實(shí)現(xiàn),包括HashMap,Hashtable和TreeMap。?
如果您疊代的集合中含有null的值,這時(shí)需要采取一定的措施,因?yàn)檫@時(shí)logic:iterate不會(huì)在page作用域中創(chuàng)建對(duì)象。一般是使用<logic:present>標(biāo)簽或<logic:notPresent>標(biāo)簽來(lái)判斷一下。
下面是logic:iterate疊代ArrayList的示例的對(duì)象引用關(guān)系和部分代碼:
圖示 3. logic:iterate中對(duì)象的引用關(guān)系
圖中的persons列表是在ListAction中填充的,在這里只是簡(jiǎn)單的加入了三個(gè)Person對(duì)象,在實(shí)際的應(yīng)用中這些數(shù)據(jù)應(yīng)該取自數(shù)據(jù)庫(kù)。具體的代碼如下:
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");
}
標(biāo)簽輸出的結(jié)果為:
00001-->趙辰?
00002-->李為芳?
00003-->王微
回頁(yè)首?
logic:present?
如果指定的值出現(xiàn)該標(biāo)簽就會(huì)創(chuàng)建其標(biāo)簽體內(nèi)的內(nèi)容。該標(biāo)簽用于以下情況:
檢查具有指定名稱(chēng)的cookie是否出現(xiàn)。?
檢查具有指定名稱(chēng)的header是否出現(xiàn)。?
檢查具有指定名稱(chēng)的JSP Bean是否出現(xiàn) 或 檢查具有指定名稱(chēng)的JSP Bean中的property屬性是否出現(xiàn)。?
檢查request中指定名稱(chēng)的參數(shù)是否出現(xiàn)。?
檢查當(dāng)前的認(rèn)證用戶(hù)是否與指定的安全角色相關(guān)聯(lián)。?
檢查當(dāng)前認(rèn)證的主體是否具有指定的名字。?
下面的代碼示例了logic:present標(biāo)簽檢查具有指定名稱(chēng)User-Agent的header是否出現(xiàn):
<logic:present header="User-Agent">
您的瀏覽器是<bean:header id="userAgent" name="User-Agent"/>
? ? <bean:write name="userAgent"/>。<br/>
</logic:present>
logic:notPresent標(biāo)簽的應(yīng)用正好和logic:present標(biāo)簽相反。
回頁(yè)首?
logic:messagesPresent?
logic:messagesPresent標(biāo)簽用于以下情況:
在request作用域中存在一個(gè)ActionMessages對(duì)象,標(biāo)簽的property屬性和ActionMessages中的property對(duì)應(yīng)。?
在request作用域中存在一個(gè)ActionErrors對(duì)象,標(biāo)簽的property屬性和ActionErrors中的property對(duì)應(yīng)。?
存在一個(gè)String對(duì)象,將其轉(zhuǎn)換(構(gòu)造)成ActionMessage然后在添加到ActionMessages中。?
存在一個(gè)String Array對(duì)象,將數(shù)組中的每一個(gè)String轉(zhuǎn)換成一個(gè)ActionMessage,在將其添加到ActionMessages中。?
標(biāo)簽的message屬性值為true時(shí)將以Globals.MESSAGE_KEY為key在request作用域中查找Message,其它情況下,將name的值作為key查找,如果name 沒(méi)有出現(xiàn),默認(rèn)值為Globals.ERROR_KEY。?
下面的代碼示例了logic:messagesPresent標(biāo)簽的典型用法:
<logic:messagesPresent>
<ul>
<html:messages id="message">
? ? <li><bean:write name="message"/></li>
</html:messages>
</ul>
</logic:messagesPresent> ?
標(biāo)簽logic:messagesNotPresent的應(yīng)用正好和logic:messagesPresent的應(yīng)用相反。
回頁(yè)首?
logic:empty?
logic:empty標(biāo)簽是用來(lái)判斷是否為空的。如果為空,該標(biāo)簽體中嵌入的內(nèi)容就會(huì)被處理。該標(biāo)簽用于以下情況:
當(dāng)Java對(duì)象為null時(shí)?
當(dāng)String對(duì)象為""時(shí)?
當(dāng)java.util.Collection對(duì)象中的isEmpty()返回true時(shí)?
當(dāng)java.util.Map對(duì)象中的isEmpty()返回true時(shí)?
下面的代碼示例了logic:empty標(biāo)簽判斷集合persons是否為空:
<logic:empty name="listForm" property = "persons">
<div>集合persons為空!</div> ? ? ?
</logic:empty> ??
logic:notEmpty標(biāo)簽的應(yīng)用正好和logic:empty標(biāo)簽相反。
回頁(yè)首?
logic:match?
logic:match標(biāo)簽用來(lái)處理子串匹配問(wèn)題。
如果指定的值匹配該標(biāo)簽就會(huì)創(chuàng)建其標(biāo)簽體內(nèi)的內(nèi)容。該標(biāo)簽用于以下情況:?
檢查具有指定名稱(chēng)的cookie是否與該標(biāo)簽的value匹配。?
檢查具有指定名稱(chēng)的header是否與該標(biāo)簽的value匹配。?
檢查具有指定名稱(chēng)的JSP Bean是否與該標(biāo)簽的value匹配 或 檢查具有指定名稱(chēng)的JSP Bean中的property屬性值是否與該標(biāo)簽的value匹配。?
檢查request中指定名稱(chēng)的參數(shù)值是否與該標(biāo)簽的value匹配。?
下面的代碼示例了logic:match標(biāo)簽的典型用法:
<logic:present header="User-Agent">
<logic:match header="User-Agent" value="MSIE 6.0">
? ? MS IE 6.0
</logic:match>
</logic:present> ??
logic:notMatch標(biāo)簽的應(yīng)用正好和logic:match標(biāo)簽相反。
回頁(yè)首?
logic:equal?
這里要介紹的不只是logic:equal(=)標(biāo)簽,而是要介紹一類(lèi)標(biāo)簽,這類(lèi)標(biāo)簽完成比較運(yùn)算,包括:
logic:equal(=)?
logic:notEqual(!=)?
logic:greaterEqual(>=)?
logic:lessEqual(<=)?
logic:graterThan(>)?
logic:lessThan(<)?
該類(lèi)標(biāo)簽的用法類(lèi)似,我們只介紹logic:equal標(biāo)簽,其它的留給您自己去完成。
logic:equal是用來(lái)判斷是否相等的。如果相等,該標(biāo)簽體中嵌入的內(nèi)容就會(huì)被處理。該標(biāo)簽用于以下情況:
比較由該標(biāo)簽的cookie屬性指定的cookie的值是否與該標(biāo)簽的value屬性值相等。?
比較由該標(biāo)簽的header屬性指定的header的值是否與該標(biāo)簽的value屬性值相等。?
比較由該標(biāo)簽的name屬性指定的JSP Bean是否與該標(biāo)簽的value屬性值相等(property屬性不出現(xiàn))或比較由該標(biāo)簽的name屬性指定的JSP Bean中的property屬性值是否與該標(biāo)簽的value屬性值相等。?
比較由該標(biāo)簽的parameter屬性指定的參數(shù)值(request中)是否與該標(biāo)簽的value屬性值相等。?
回頁(yè)首?
logic:forward?
我覺(jué)得將forward和redirect這兩個(gè)動(dòng)作放到一起對(duì)比著介紹更加有利于理解,基于此原因也就將logic:forward和logic:redirect這兩個(gè)標(biāo)簽也拿到這里一起介紹了。
讓我們看看這兩個(gè)動(dòng)作的區(qū)別:?
forward是在servlet內(nèi)部執(zhí)行,瀏覽器完全不會(huì)感知到這個(gè)動(dòng)作,原始的url也不會(huì)改變,瀏覽器重新裝載的話也只是對(duì)原始的請(qǐng)求進(jìn)行簡(jiǎn)單的重復(fù)。?
redirect則分成兩個(gè)步驟:第一步是web應(yīng)用程序告訴瀏覽器第二個(gè)url,然后瀏覽器向第二個(gè)url發(fā)送請(qǐng)求。?
redirect比f(wàn)orward慢,因?yàn)闉g覽器要做二次請(qǐng)求。還有就是要注意,在第一次的請(qǐng)求作用域(request作用域)內(nèi)的bean對(duì)于第二次請(qǐng)求是不可見(jiàn)的。
理解了上面描述的區(qū)別也就知道了什么時(shí)候該選用logic:forward標(biāo)簽什么時(shí)候該選用logic:redirect標(biāo)簽了。logic:forward標(biāo)簽完成PageContext.forward()或HttpServletResponse.sendRedirect(),如何選擇由控制器決定。logic:redirect標(biāo)簽完成HttpServletResponse.sendRedirect()。
在使用logic:redirect標(biāo)簽時(shí)我們可以向使用html:link一樣構(gòu)造baseurl和query參數(shù)。如果您感興趣可以參考html:link標(biāo)簽。
<s:action>標(biāo)簽的用法
(2012-09-27 18:04:34)
轉(zhuǎn)載▼
標(biāo)簽:
<saction>
struts2
雜談
分類(lèi): struts2
使用action標(biāo)簽,可以允許在jsp頁(yè)面中直接調(diào)用Action,在調(diào)用Action時(shí)候,可以指定需要被調(diào)用的Action的name和namespace.如果指定了executeResult參數(shù)的屬性值為true,該標(biāo)簽會(huì)把Action的處理結(jié)果(視圖資源)包含到本頁(yè)面中. 使用action標(biāo)簽指定屬性有:?
id: 可選屬性,作為該Action的引用ID ? ?
? ?
name:必選屬性,指定調(diào)用Action ? ?
? ?
namespace:可選屬性,指定該標(biāo)簽調(diào)用Action所屬namespace ? ?
? ?
executeResult:可選屬性,指定是否將Action的處理結(jié)果包含到本頁(yè)面中.默認(rèn)值為false,不包含. ? ?
? ?
ignoreContextParam:可選參數(shù),指定該頁(yè)面的請(qǐng)求參數(shù)是否需要傳入調(diào)用的Action中,默認(rèn)值是false,即傳入?yún)?shù).?
?<s:action name="login" executeResult="true" namespace="/"></s:action> ?
傳遞參數(shù)?
? ?<s:action name="actinName" executeResult="true" namespace="/">?
? ? <s:param name="currentPage" value="傳遞的值"></s:param>?
? ?</s:action>?
<s:param ></s:param>是以request方式的值的,而不是以參數(shù)傳值 ?
所以request.getParameter("")會(huì)獲取不到值?
通過(guò)request.getAttribute("")方式可以獲取?
另外:使用<s:param ></s:param> value指代的是action定義的對(duì)象的名稱(chēng),而不是一個(gè)值?
和 <s:textfield>中的name是一個(gè)意思,所以要要傳遞字符串的不能把值寫(xiě)value中而應(yīng)該寫(xiě)到?
<s:param >寫(xiě)到這里</s:param>?
例如:?
struts.xml如下配置?
<package name="reportList" namespace="/reportList" extends="default">?
<action name="tab_*" action="xxxx" method="{1}"?
<result></result>?
</action>?
</package>?
頁(yè)面加載如下段?
<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就可以拿到值了
總結(jié)
以上是生活随笔為你收集整理的struts2中的s标签解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2015年12月7号工作日志------
- 下一篇: STM32+ENC28J60+UIP协议