Logic 標籤庫提供流程控制標籤,分為三大類:**迴圈(iterate)、條件判斷、導向控制**。本文詳細說明各標籤屬性與使用範例。
<logic:iterate>枚舉陣列、集合、Iterator、Map 鍵值集等,功能類似 JSTL <c:forEach>。
| 屬性 | 說明 |
|---|---|
| id | 迴圈變數名(page 範圍) |
| name | 集合/陣列物件名,或包含 getter 的 JavaBean |
| property | 若 name 為 JavaBean,指定其集合屬性名 |
| indexId | 索引變數名(從 0 開始) |
| offset | 起始索引偏移量 |
| length | 枚舉元素個數 |
| scope | 搜尋 name 的範圍(page/request/session/application) |
iterate.jsp<%@ taglib uri="https://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="https://struts.apache.org/tags-bean" prefix="bean" %>
<%
String[] array = {"bill", "王明", "趙陽"};
pageContext.setAttribute("array", array);
List<String> list = new LinkedList<>();
list.add("計算機"); list.add("英語");
pageContext.setAttribute("list", list);
pageContext.setAttribute("iterator", list.iterator());
Map<String,String> map = new HashMap<>();
map.put("book", "書"); map.put("apple", "蘋果");
pageContext.setAttribute("keySet", map.keySet());
pageContext.setAttribute("entrySet", map.entrySet());
%>
<!-- 陣列:offset=1, length=1 只取第 2 元素 -->
<logic:iterate id="s" name="array" indexId="i" offset="1" length="1">
array[<bean:write name="i"/>] = <bean:write name="s"/>
</logic:iterate>
<!-- JavaBean 索引屬性 -->
<jsp:useBean id="form" class="actionform.HtmlTagsForm"/>
<jsp:setProperty name="form" property="hobbies" value="<%=new String[]{"計算機","旅遊","攝影"}%>"/>
<logic:iterate id="s" name="form" property="hobbies">
<bean:write name="s"/>
</logic:iterate>
<!-- List -->
<logic:iterate id="s" name="list" indexId="i">
list[<bean:write name="i"/>] = <bean:write name="s"/>
</logic:iterate>
<!-- Iterator -->
<logic:iterate id="s" name="iterator" indexId="i" offset="1">
list[<bean:write name="i"/>] = <bean:write name="s"/>
</logic:iterate>
<!-- Map EntrySet -->
<logic:iterate id="entry" name="entrySet">
<bean:write name="entry" property="key"/> = <bean:write name="entry" property="value"/>
</logic:iterate>
present、notPresent、empty、notEmpty、messagesPresent、messagesNotPresentequal、notEqual、greaterThan、greaterEqual、lessThan、lessEqualmatch、notMatch(正則表達式)name:目標物件名property:物件屬性名(若 name 為 JavaBean)value:比較基準值(比較類標籤必填)<logic:empty name="var">var 為空</logic:empty>
<logic:lessThan name="employee" property="age" value="18">不符合工作年齡</logic:lessThan>
<logic:redirect href="https://www.example.com"/>:客戶端重導向(HTTP 302)。<logic:forward name="globalForwardName"/> 或 page="...":伺服器端轉向,功能同 <jsp:forward>。完整標籤參考:Struts Logic Taglib
Logic 標籤庫將 Java 流程控制邏輯標籤化,配合 Bean 標籤庫輸出,實現「View 層無 Java 程式碼」的早期 MVC 理想。現代開發多改用 JSTL <c:forEach>、<c:if>、<c:redirect> 等標準標籤,但理解 Logic 標籤有助於維護舊版 Struts 專案。