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

Struts 2 表單標籤完全指南:核心標籤、屬性綁定、主題模板與最佳實踐

     編輯:Java 綜合教學

Struts 2 表單標籤庫深度解析:從基礎輸入到複雜佈局的企業級應用指南

Struts 2 表單標籤透過 OGNL 表達式實現視圖與 Action 屬性雙向綁定,支援多種主題模板 (xhtml、simple、css_xhtml) 自動生成結構化 HTML。本文系統梳理 20+ 核心標籤用法、name/value 雙向映射機制、主題定製與常見坑點。

標籤分類總覽

類別標籤HTML 對應核心屬性
表單容器<s:form><form> + table (xhtml 主題)action, namespace, method, enctype, validate, theme
<s:token><input type="hidden">防重複提交令牌
文本輸入<s:textfield><input type="text">name, label, value, maxlength, readonly
<s:password><input type="password">name, label, showPassword
<s:textarea><textarea>name, label, rows, cols, wrap
<s:hidden><input type="hidden">name, value
<s:file><input type="file">name, label, accept
<s:label><label>name, label, labelSeparator
選擇類<s:select><select><option>name, list, listKey, listValue, headerKey, headerValue, multiple
<s:radio><input type="radio">name, list, listKey, listValue
<s:checkbox><input type="checkbox">name, fieldValue, label
<s:checkboxlist>多個 checkboxname, list, listKey, listValue
<s:combobox>input + select 混合name, list, listKey, listValue
進階選擇<s:doubleselect>雙級聯動下拉name, list, doubleName, doubleList
<s:optiontransferselect>雙列表互選name, list, doubleName, doubleList
<s:updownselect>上下移動排序name, list, listKey, listValue
<s:optgroup><optgroup>label, list (需嵌套在 select 中)
提交/重置<s:submit><input type="submit/button/image">type (submit/button/image), value, action, method
<s:reset><input type="reset">value
<s:head>CSS/JS 引用theme (ajax 主題需此標籤)
富文本/日期<s:richtexteditor>TinyMCE/FCKeditorname, theme
<s:datepicker>JS 日期選擇器name, displayFormat, changeMonthYear

核心機制:name 與 value 的雙向綁定


    
    
    
    
    
    
    
    
    
    
    

關鍵規則

  • name 屬性對應 Action 屬性路徑 (OGNL 表達式)
  • value 屬性指定顯示值表達式,預設為 %{name} (即同名屬性)
  • 提交時,Struts 2 根據 name 尋找對應 setter,自動類型轉換
  • 巢狀屬性:name="user.address.city" 需 Action 有 getUser().getAddress().setCity() 完整鏈路

常用標籤實戰範例

1. 基礎表單佈局 (xhtml 主題)


    
    
    
    
    
    
    
    
    
      

xhtml 主題輸出結構:

...

2. 雙級聯動下拉 (doubleselect)

// Action
private List provinces;
private Map> citiesMap;  // key=provinceCode

// JSP

3. 文件上傳完整配置



    
        2097152  
        image/jpeg,image/png,application/pdf
    
    
    /upload_result.jsp




    
    



private File document;
private String documentContentType;
private String documentFileName;
// + getter/setter

4. 防重複提交 Token 機制



      
    




    
        orderToken
    
    
    /token_error.jsp  
    /success.jsp

主題模板系統

主題特點適用場景依賴
xhtml (預設)Table 佈局、Label 對齊、錯誤訊息內聯快速原型、後台管理無額外依賴
simple極簡輸出、無包裝標籤、完全自定義 CSS前端框架整合 (Bootstrap、Vue、React)無
css_xhtmlDiv+CSS 佈局、語義化、可訪問性佳標準 Web 專案需引入 Struts 2 CSS
ajax支援 AJAX 表單提交、驗證局部刷新場景<s:head> 引入 Dojo

全局設置主題




    struts2
    org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
    
        struts.ui.theme
        css_xhtml
    

常見問題與避坑指南

問題原因解決
checkbox 未勾選提交無參數HTML 規格:未勾選 checkbox 不提交Action 屬性初始化為 false,或用隱藏域 <input type="hidden" name="flag" value="false">
select 多選值接收失敗Action 屬性類型不匹配使用 List 或 String[] 接收,配合 multiple="true"
日期格式綁定錯誤類型轉換器預設格式不符註冊自定義 TypeConverter 或使用 @DateTimeFormat (Struts 2.5+)
file 上傳 Action 屬性為 nullform 缺少 enctype、攔截器未配置檢查 enctype="multipart/form-data"、fileUpload 攔截器
OGNL 表達式報錯屬性鏈路中斷 (null 指針)Action 初始化嵌套對象、或使用安全導航 user?.address?.city

遷移建議:Struts 2 → Spring MVC / Spring Boot

Struts 2 已進入維護模式,新專案建議直接使用 Spring MVC (Spring Boot Web)。對應關係:

Struts 2Spring MVC / Thymeleaf
<s:form><form th:action="@{/save}" th:object="${user}">
<s:textfield name="name"><input type="text" th:field="*{name}">
<s:select list="items" listKey="id" listValue="name"><select th:field="*{itemId}"><option th:each="i : ${items}" th:value="${i.id}" th:text="${i.name}">
<s:token>Spring Security CSRF: <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}">
驗證框架Bean Validation (JSR-380): @Valid @NotBlank @Size + BindingResult
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved