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

Struts 2 表單提交 List 資料:索引屬性命名法則與 OGNL 綁定

     編輯:程式設計綜合問答

核心規則

Struts 2 使用 OGNL 表達式綁定表單欄位到 Action 屬性。對於 List<POJO>,欄位名需包含索引:

items[0].propertyName
items[1].propertyName
...

JSP 正確寫法

<s:iterator value="items" status="stat">
  <!-- 隱藏主鍵 -->
  <input type="hidden" name="items[%{#stat.index}].id" value="<s:property value='id'/>" />
  <!-- 可編輯欄位 -->
  <input type="text" name="items[%{#stat.index}].name" value="<s:property value='name'/>" />
  <select name="items[%{#stat.index}].categoryId">
    <s:iterator value="categories" var="cat">
      <option value="<s:property value='id'/>" <s:if test='id == top.items[#stat.index].categoryId'>selected</s:if>>
        <s:property value='name'/>
      </option>
    </s:iterator>
  </select>
</s:iterator>

Action 類別

public class ItemAction extends ActionSupport {
    private List<Item> items = new ArrayList<>(); // 必須初始化
    public List<Item> getItems() { return items; }
    public void setItems(List<Item> items) { this.items = items; }
    // execute()...
}

常見錯誤

  • 欄位名寫成 items.id(無索引) → 只能綁定單一物件。
  • items 未初始化 → OGNL 無法建立列表元素,拋 NullPointerException。
  • 索引不連續(如刪除行後) → 重新排序或使用 stat.index 確保連續。

掌握 items[索引].屬性 命名,即可輕鬆實現列表資料的批次編輯與提交。

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