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

Struts2 中 遍歷 Action List 集合無數據顯示的排查

     編輯:程式設計綜合問答

常見原因排查清單

1. Action 中 List 未初始化

private List listString = new ArrayList<>(); // 必須初始化
public List getListString() { return listString; }
public void setListString(List listString) { this.listString = listString; }
  • 未初始化導致 NullPointerException 或空集合。
  • Getter/Setter 必須符合 JavaBean 規範 (首字母大寫)。

2. JSP 迭代器屬性錯誤

<!-- 錯誤:value 屬性寫成變量名而非 OGNL 表達式 -->
<s:iterator value="listString" var="item">  <!-- 正確 -->
    <s:property value="#item" /><br/>
</s:iterator>

<!-- 常見錯誤 -->
<s:iterator value="listString"> ... </s:iterator>  // 缺少 var,無法引用當前項
<s:iterator value="%{listString}"> ... </s:iterator>  // 加 %{} 也是可行的

3. 作用域與生命周期

  • Action 實例默認 prototype (每請求一個),List 數據在 execute() 中填充。
  • 若使用 ModelDriven 或 Preparable 接口,確保 prepare() 不覆蓋已填充數據。

4. 類型不匹配

  • List 泛型類型與 JSP 取值方式一致:List 用 #item,List 用 #item.username。

完整可用示例

Action

public class UserAction extends ActionSupport {
    private List userList = new ArrayList<>();
    
    public String execute() {
        userList.add(new User("Alice", 25));
        userList.add(new User("Bob", 30));
        return SUCCESS;
    }
    // getter/setter 省略
}

JSP

<table>
<s:iterator value="userList" var="user" status="st">
    <tr>
        <td><s:property value="#st.index + 1" /></td>
        <td><s:property value="#user.name" /></td>
        <td><s:property value="#user.age" /></td>
    </tr>
</s:iterator>
</table>

調試技巧

  1. 在 Action execute() 末尾打印 System.out.println(userList) 確認數據已填充。
  2. JSP 頁面臨時加 <s:debug></s:debug> 查看值棧內容。
  3. 檢查 Struts2 版本與標簽庫 struts-tags.tld 是否匹配。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved