1.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>
2.logic:notEmpty
該標籤的應用程式正好和logic:empty標籤相反。
3.logic:equal
該標籤為等於比較符。
eg1. 比較使用者的狀態屬性是否1,若為1,輸出"啟用";
eg2. 如果上例中的value值是動態獲得的,例如需要透過bean:write輸出,因struts不支援標籤嵌套,可採用EL來解決該問題。
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屬性值相等。
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
此標籤比較物件是否相等;
logic:match標籤用來處理子字串比對問題。
如果指定的值符合該標籤就會建立其標籤體內的內容。此標籤用於以下情況:
檢查具有指定名稱的cookie是否與該標籤的value相符。
檢查具有指定名稱的header是否與該標籤的value相符。
檢查具有指定名稱的JSP Bean是否與該標籤的value相符或檢查具有指定名稱的JSP Bean中的property屬性值是否與該標籤的value相符。
檢查request中指定名稱的參數值是否與該標籤的value相符。
下面的程式碼範例了logic:match標籤的典型用法:
eg0.
複製代碼代碼如下:
<logic:present header="User-Agent">
<logic:match header="User-Agent" value="MSIE 6.0">
MS IE 6.0
</logic:match>
</logic:present>
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:notMatch標籤的應用程式正好和logic:match標籤相反。
此標籤用於比較物件是否不相同,與logic:match意義相反,使用方法類似
12. logic:messagePresent
此標籤用於判斷ActionMessages/ActionErrors物件是否存在;
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標籤的典型用法:
eg1.
複製代碼代碼如下:
<logic:messagesPresent>
<ul>
<html:messages id="message">
<li><bean:write name="message"/></li>
</html:messages>
</ul>
</logic:messagesPresent>
eg2.
如果存在error訊息,將其全部輸出:
複製代碼代碼如下:
<logic:messagePresent property="error">
<html:messages property="error" id="err" >
<bean:write name="err"/>
</html:messages>
</logic:messagePresent >
13. logic:messagesNotPresent
標籤logic:messagesNotPresent的應用程式正好和logic:messagesPresent的應用程式相反。
此標籤用於判斷ActionMessages/ActionErrors物件是否不存在,使用方法與logic:messagePresent類似
14. logic:present
此標籤用於判斷request物件傳遞參數是否存在。
如果指定的值出現該標籤就會建立其標籤體內的內容。此標籤用於以下情況:
檢查具有指定名稱的cookie是否出現。
檢查具有指定名稱的header是否出現。
檢查具有指定名稱的JSP Bean是否出現或檢查具有指定名稱的JSP Bean中的property屬性是否出現。
檢查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>
eg4.
下面的程式碼範例了logic:present標籤檢查具有指定名稱User-Agent的header是否出現:
<logic:present header="User-Agent">
您的瀏覽器是<bean:header id="userAgent" name="User-Agent"/>
<bean:write name="userAgent"/>。 <br/>
</logic:present>
15. logic:notPresent
此標籤用來判斷request物件傳遞參數是否不存在,意義與了logic:present相反,使用方法類似。
logic:notPresent標籤的應用程式正好和logic:present標籤相反。
16. logic:iterator
用於顯示清單為collection的值(List ,ArrayList,HashMap等)。
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-->王微
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"/>
18. logic:forward和logic:redirect的比較
-------------------------------------------------- -------------------------------------------------- ------------
將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標籤。