在Struts應用中,Struts Logic標籤庫主要用於:
1 根據特定的邏輯條件來判斷網頁內容
2 判斷指定的內容是否存在
3 循環遍歷集合元素
4 進行字符串的匹配
5 進行請求轉發和重定向
與比較運算相關的Logic標籤詳解
<logic:equal>
比較變量是否等於指定的常量
<logic:notEqual>
比較常量是否不等於指定的常量
<Logic:lessThan>
比較常量是否小於指定的常量
<logic:lessEqual>
比較常量是否小於或等於指定的常量
<logic:geraterThan>
比較常量是否大於指定的常量
<logic:geraterEqual>
比較常量是否大於或等於指定的常量
與比較運算相關的Logic標籤的經常使用屬性:
Value 指定一個用於供比較的常量值
Cookie 指定一個cookie值與給定的常量值進行比較
Header 指定一個header屬性值與給定的常量值進行比較
Name 指定一個變量或JavaBean對象與給定的常量值進行比較
Property 若是name屬性指定的是JavaBean對象,則由property屬性指定一個 屬性與給定的常量值進行比較
Parameter 指定一個請求參數與給定的常量值進行比較
Scope 指定name屬性指定對象的做用範圍
與字符串匹配相關的Logic的標籤詳解:
Struts Logic 標籤庫中與字符串匹配相關的標籤有:
<logic:match>
標籤判斷變量中是否包含指定的常量字符串
<logic:notMatch>
標籤判斷變量中是否不包含指定的常量字符串
與字符串匹配相關的Logic標籤的屬性:
Value 指定一個用於供比較的常量字符串
Location 指定子字符串的匹配位置,有兩個可選值:
Start:表示子串位於母串的起始處
End:表示子串位於母串的結尾處
Cookie 指定一個cookie值與給定的常量字符串進行比較
Header 指定一個header值與給定的常量字符串進行比較
Name 指定一個變量或JavaBean對象與給定的常量字符串進行比較
Property 若是name屬性指定的是JavaBean對象,則由property屬性指定一個 屬性與給定的常量字符串進行比較
Parameter 指定一個請求參數值與給定的常量字符串進行比較
Scope 指定name屬性指定對象的做用範圍
<logic:empty>與<logic:notEmpty>
這對標籤主要用於判斷指定的變量是否爲null或空字符串
<logic:empty>
判斷指定變量是否爲null或空字符串
<logic:notEmpty>
判斷指定的變量是否不是null或非空字符串
<logic:empty>與<logic:notEmpty>
Name 指定一個變量或JavaBean對象判斷是否存在
Property 若是name屬性指定的是JavaBean對象,則由property屬性指定一個 屬性判斷其屬性是否存在
Scope 指定name屬性指定對象的做用範圍
<logic:present>與<logic:notPresent>
這對標籤主要用於判斷指定對象是否存在
<logic:present> 判斷指定對象是否存在
<logic:notPresent> 判斷指定對象是否不存在
<logic:present>與<logic:notPresent>經常使用屬性:
Value 判斷指定的cookie是否存在
Name 判斷指定的變量後JavaBean對象是否存在
Header 判斷指定的header是否存在
Property 若是name屬性指定的是JavaBean對象,則判斷由property屬性指定 一個屬性是否存在
Parameter 判斷指定的請求參數是否存在
Scope 指定name屬性指定對象的做用範圍
Role 判斷當前經過權限驗證的用戶是否具備指定的安全角色
User 判斷當前經過權限驗證的用戶是否具備指定的用戶名
<logic:messagePresent>與<logic:messageNotPresent>
這對標籤主要用於判斷指定的消息對象或消息是否存在與request範圍內
<logic:messagePresent>
判斷指定消息是否存在
<logic:messageNotPresent>
判斷指定消息是否不存在
<logic:messagePresent>與<logic:messageNotPresent>經常使用屬性:
Name 指定在request範圍內檢索ActionMessage或ActionErrors對象的屬性 key
Property 指定從ActionMessages或ActionErrors對象中檢索某條消息key
Message 若是設置爲true,則name屬性指定的值無效,若是爲false,則根據 name的屬性指定的屬性key
<logic:iterate>標籤
<logic:iterate>可以在一個循環中遍歷數組、Collection、Enumeration、Iterator或Map中的全部元素
<logic:iterate>經常使用屬性:
Id 指定一個用於引用集合中當前元素的變量名
Collection 指定一個用於獲得集合對象的運行時表達式
Name 指定一個須要遍歷的集合對象
Property 若是name屬性指定的是JavaBean對象,則有Property屬性指定其中 一個屬性做爲須要遍歷的集合對象
Scope 指定name屬性指定對象的做用範圍
Type 指定集合中每一個元素的類型
indexId 指定一個用於存放當前元素序號的變量名
Length 指定須要遍歷的元素數目,默認值爲集合的全部元素
Offset 指定開始遍歷的起始位置,默認爲0
<logic:forward>標籤
用於請求轉發,它的name屬性與Struts配置文件的<global-forwards>的子元素<forward>元素匹配
<logic:redirect>標籤 html
Logic 標籤庫 數組
此標籤庫能夠分爲三種類型:條件、循環、轉發/重定向。
一.) 條件類型 瀏覽器
1. logic:empty和logic:notEmpty
logic:empty標籤判斷腳本變量是否爲null,是不是一個空的字符串(長度爲0),是不是一個空的collection或map(調用isEmpty()方法來判斷)。logic:notEmpty標籤相似。 安全
<logic:empty name="myBean"> |
2. 上段代碼表示當一個名爲myBean的bean在全部的scope中都不存在時,輸出The bean is missing;存在的話輸出The bean is not missing。
此標籤有三個屬性:name、property和scope。 框架
3. logic:equal, logic:notEqual, logic:lessThan, logic:greaterThan,logic:lessEqual, and logic:greaterEqual
這堆logic:*equal*標籤從名字上就能知道意思,它們使用起來有些笨拙。
有以下屬性:name、property、scope、value、cookie、header、parameter。 less
<logic:equal name="bean" property="doubleProperty" value="<%= doub1 %>"> |
4. spa
5. logic:present和logic:notPresent
檢查header、request parameter、cookie、JavaBean或JavaBean propertie是否存在且不等於null。另外還能夠檢查當前用戶的身份,使用屬性user和role。
其它的屬性有:name、property、scope、cookie、header、parameter。 orm
<logic:notPresent name="myBean" property="prop" scope="page"> |
6. 上段代碼檢查在page做用域內名爲myBean的bean是否有一個prop屬性。
7. logic:match和logic:notMatch
比較兩字符串是否相等,能夠比較字符串的開始的、結尾的或其中的某個部分。
location屬性:指定從某個位置開始進行比較。
其它的屬性有:name、property、scope、value、cookie、header、parameter。
下面的例子是檢查瀏覽器類型:
<logic:match header="User-Agent" value="Mozilla"> |
8.
檢查bean屬性是否匹配"hello world"字符串:
<logic:match name="bean" property="stringProperty" value="hello world"> |
9.
檢查名爲"name"的請求參數是不是"xyz"的子字符串,可是子字符串必須從"xyz"的索引位置1開始(也就是說子字符串必須是"y"或"yz"):
<logic:match parameter="name" value="xyz" location="1"> |
二.) 循環類型
logic:iterate
重複嵌套在此標籤體內的指定集合的元素,集合必須爲以下類型:array 、Collection(包括ArrayList和Vector)、Enumeration、Iterator、Map(包括HashMap、Hashtable和TreeMap)。例如:
<logic:iterate id="employee" name="department" property="employees" scope= "request"> |
上面的代碼迭代了一個employee的集合,是department屬性employees的一個集合,做用域爲request。
爲了輸出第五個到第十個employee,須要使用length和offset屬性:
<logic:iterate id="employee" name="department" property="employees" scope= "request" length="10" offset="5"> |
你能夠定義一個變量保存當前的索引值:
<ol> |
三.) 轉發/重定向類型
logic:forward和logic:redirect
logic:forward標籤和jsp:forward標籤和類似,但它可使用global forward中的一個ActionForward:
<logic:forward name="login" /> |
logic:redirect標籤和上面的標籤相似,但它默認調用的方法是response.sendRedirect(),取代了上面的requestDispatcher.forward()。最大的不一樣是它支持全部html:link標籤的屬性,因此你可以指定request參數:
<logic:redirect name="login" paramId="employeeId" paramName="employee" property="id" /> |
提示:1.) 在MVC框架下,不推薦使用這兩個標籤,你應該是從controller中選擇下一個view,而不是從view中選擇。
2.) 在Jsp頁面中不要過多的使用logic標籤。
1.<logic:equal> and so on比較標籤
如下eg都是由一個servlet轉發過來的
MyBean mb = new MyBean();
mb.setName("yc");
mb.setCount(200);
request.setAttribute("mybean",mb);
request.getRequestDispatcher("jsp1.jsp").forward(request,response);
eg1:<bean:define id="myint" value="100"/> //當前頁面定義一個字符串
<logic:equal name="myint" value="100">
myint=100
</logic:equal>
eg2:<bean:define id="bean3" name="mybean" scope="request"/> //從request上獲取bean
<logic:lessThan name="bean3" property="count" value="200.a"> //比較bean的count屬性和200.a
bean3 LessThan 200.a
</logic:lessThan>
注意:若是兩個字符串都可以成功轉爲數字,則是比較數字的大小,不然像eg2就是比較字符串的大小
eg3:<bean:define id="bean1" name="mybean" property="name" scope="request"/>
<logic:equal name="bean1" value="yc">
name1=yc
</logic:equal>
eg4:<bean:define id="bean2" name="mybean" scope="request"/>
<logic:equal name="bean2" property="name" value="yc">
name2=yc
</logic:equal>
注意:eg3和eg4都是比較bean屬性,只是寫法不一樣
eg5:比較請求參數
<logic:equal parameter="id" value="150">
<bean:parameter id="myid" name="id"/>
parameter:<bean:write name="myid"/>=150
</logic:equal>
2.<logic:match>
查看指定字符串是否被包含
<logic:match name="" value="被包含字符串" location="start/end也能夠不寫,就是任意位置"/>
eg:<bean:define id="bean4" name="mybean" property="name" scope="request"/>
<logic:match name="bean4" value="y" location="start">
yc is start with bean4
</logic:match>
3.< logic:iterator>
a.遍歷Vector等集合,value形式的
<logic:iterator id="每一個集合的元素" name="集合在當前頁面的綁定名" indexId="序號"
offset="起始位置,0開始" length="遍歷長度"/>
前提: Vector v = new Vector();
v.add("dog");
v.add("girl");
v.add("bird");
v.add("cat");
request.setAttribute("myvector",v);
request.getRequestDispatcher("jsp1.jsp").forward(request,response);
eg1:<bean:define id="vector1" name="myvector" scope="request"/>
<logic:iterate id="element" name="vector1">
<bean:write name="element"/>
<br />
</logic:iterate>
eg2:<bean:define id="vector2" name="myvector" scope="request"/>
<logic:iterate id="element" name="vector2" indexId="index" offset="1" length="3">
<bean:write name="index"/>.<bean:write name="element"/><br />
</logic:iterate>
b.遍歷Map等,key/value形式
只是輸出的時候有所不一樣
<bean:write name="" property="key"/>輸出元素的key部分
<bean:write name="" property="value"/>輸出元素的value部分
前提: HashMap hm = new HashMap();
hm.put("yc","yuechen");
hm.put("tjs","tianjinsong");
hm.put("xc","xiaocen");
hm.put("xk","xukai");
request.setAttribute("mymap",hm);
eg:<bean:define id="map1" name="mymap" scope="request"/>
<logic:iterate id="element" name="map1" indexId="index">
<bean:write name="index"/>.<bean:write name="element" property="key"/>:<bean:write name="element" property="value"/><br />
</logic:iterate>
c.遍歷map中的集合
雙層iterator,內層iterator須要加入property="value"
前提: HashMap hm2 = new HashMap();
String[]asia = {"china","japan","korea"};
hm2.put("asia",asia);
String[]erop = {"greman","rasa","england"};
hm2.put("erop",erop);
String[]us = {"usa","canada"};
hm2.put("us",us);
request.setAttribute("country",hm2);
eg:<bean:define id="myc" name="country" scope="request"/> <logic:iterate id="element" name="country" indexId="index"> <bean:write name="index"/>.<bean:write name="element" property="key"/><br /> <logic:iterate id="inelement" name="element" indexId="inindex" property="value"> -----<bean:write name="inindex"/>.<bean:write name="inelement"/><br /> </logic:iterate> </logic:iterate>