首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts 1.x 核心標籤庫完整參考:HTML、Bean、Logic、Nested 與 Template 標籤實用指南

     編輯:Java 相關知識

五大標籤庫總覽

標籤庫URI (struts-config.xml 宣告)核心功能常用前綴
HTML/tags/struts-html表單元素、超連結、圖片、表單驗證錯誤顯示html
Bean/tags/struts-beanBean 建立、屬性輸出、資源訊息、迭代器暴露bean
Logic/tags/struts-logic條件判斷、集合迭代、空值檢查、轉向logic
Nested/tags/struts-nested巢狀屬性存取、支援上述三庫標籤巢狀使用nested
Template/tags/struts-template頁面模板化(已被 Tiles 取代,**不建議新專案使用**)template

JSP 頁面引入宣告

<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-nested" prefix="nested" %>

HTML 標籤:表單構建主力

表單與輸入元件

<html:form action="/user/save" method="post">
  <!-- 文字輸入 -->
  <html:text property="user.username" maxlength="20" />

  <!-- 密碼 -->
  <html:password property="user.password" />

  <!-- 單選按鈕 -->
  <html:radio property="user.gender" value="M" /> 男
  <html:radio property="user.gender" value="F" /> 女

  <!-- 核取方塊(單一) -->
  <html:checkbox property="user.agreeTerms" />

  <!-- 多選核取方塊(陣列/集合) -->
  <html:multibox property="user.hobbies" value="reading" /> 閱讀
  <html:multibox property="user.hobbies" value="gaming" /> 遊戲

  <!-- 下拉選單 -->
  <html:select property="user.city">
    <html:option value="">-- 請選擇 --</html:option>
    <html:option value="TPE">台北</html:option>
    <html:option value="TAO">桃園</html:option>
  </html:select>

  <!-- 隱藏欄位 -->
  <html:hidden property="user.id" />

  <!-- 提交/重置 -->
  <html:submit value="送出" />
  <html:cancel />
</html:form>

驗證錯誤顯示

<html:errors property="username" /> <!-- 顯示特定欄位錯誤 -->
<html:errors /> <!-- 顯示所有錯誤 -->

Bean 標籤:資料輸出與暴露

<!-- 輸出 Bean 屬性(相當於 ${user.username}) -->
<bean:write name="user" property="username" />

<!-- 定義頁面範圍變數 -->
<bean:define id="interests" name="user" property="hobbies" type="java.util.List" />

<!-- 從資源檔取得國際化訊息 -->
<bean:message key="label.welcome" arg0="${user.name}" />

<!-- 輸出集合大小 -->
<bean:size id="count" name="userList" />

Logic 標籤:流程控制與迭代

集合迭代(最常用)

<logic:iterate name="userList" id="user" indexId="idx">
  <tr>
    <td><bean:write name="user" property="username" /></td>
    <td><bean:write name="user" property="email" /></td>
    <td>
      <!-- 巢狀迭代興趣 -->
      <bean:define id="hobbies" name="user" property="hobbies" type="java.util.List" />
      <logic:iterate id="hobby" collection="<%=hobbies%>">
        <bean:write name="hobby" /><br/>
      </logic:iterate>
    </td>
    <td>
      <a href="edit.do?id=<bean:write name='user' property='id'/>">編輯</a>
      <a href="delete.do?id=<bean:write name='user' property='id'/>">刪除</a>
    </td>
  </tr>
</logic:iterate>

條件判斷

<logic:equal name="user" property="role" value="ADMIN">
  <html:link action="/admin/panel">管理後台</html:link>
</logic:equal>

<logic:notEqual name="user" property="status" value="LOCKED">
  <span class="active">正常</span>
</logic:notEqual>

<logic:present name="user" property="avatar"> <!-- 不為 null 且非空字串 -->
  <img src="<bean:write name='user' property='avatar'/>" />
</logic:present>

<logic:empty name="userList">
  <div class="alert">查無資料</div>
</logic:empty>

Nested 標籤:巢狀屬性存取

<!-- 直接存取巢狀屬性 user.address.city -->
<nested:write property="user.address.city" />

<!-- 巢狀迭代 -->
<nested:iterate property="user.orders" id="order">
  <nested:write property="order.id" /> - 
  <nested:write property="order.totalAmount" />
</nested:iterate>

Struts 標籤 vs JSTL/EL 選擇指南

場景推薦理由
純資料顯示、迭代、條件JSTL/EL語法標準、效能較好、IDE 支援完整、不綁定 Struts
表單輸入、驗證錯誤回填、ActionForm 綁定Struts HTML 標籤自動綁定 ActionForm 屬性、支援驗證框架錯誤標記、html:multibox 處理集合綁定
國際化訊息Struts bean:message 或 fmt:messageStruts 整合資源包機制,fmt 標準通用
巢狀屬性存取Nested 標籤 或 ELEL 直接 ${user.address.city} 更簡潔

Struts 標籤最大優勢:ActionForm 自動回填

// Action 中準備修改頁面資料
public ActionForward edit(ActionMapping mapping, ActionForm form, ...) {
    UserForm uf = (UserForm) form;
    User user = userService.findById(id);
    uf.setUser(user); // 設定巢狀 Bean
    uf.setHobbies(user.getHobbies().toArray(new String[0])); // 多選陣列
    return mapping.findForward("edit");
}
<!-- edit.jsp 直接使用,無需手動 value="${user.username}" -->
<html:form action="/user/update">
  <html:text property="user.username" /> <!-- 自動顯示 user.username -->
  <html:multibox property="hobbies" value="reading" /> <!-- 自動勾選 -->
  <html:multibox property="hobbies" value="gaming" />
  <html:submit value="更新" />
</html:form>

總結:Struts 1.x 標籤庫在「表單綁定與驗證整合」上仍有獨特優勢,但純顯示邏輯建議改用 JSTL/EL。現代專案若仍維護 Struts 1,請善用 html:form、html:multibox、bean:write、logic:iterate 核心組合,其餘逐步遷移至標準標籤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved