You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Struts 2使用s:iterator遍历List时无法展示对象属性是什么原因

问题原因

  • 取值对象使用错误:<s:iterator>的status属性对应的是迭代状态对象,仅存储迭代索引、是否为首/尾元素、迭代计数这类进度信息,不是当前遍历到的Dog实例,你调用#x.name自然无法拿到Dog的属性值。
  • 表格结构位置错误:你把完整的<table>标签和表头都放在了迭代标签内部,每遍历1个Dog就会生成1个独立表格,所以会出现表头重复5次的问题(说明你的List<Dog>长度为5)。

修正方案

如果你想要单个表格展示所有Dog信息,可以参考如下写法:

<!-- 表格和表头放在迭代外部,只生成一次 -->
<table>
    <tr>
        <th>Name</th>
        <th>Breed</th>
    </tr>
    <!-- 迭代只循环生成数据行,用var给当前迭代的Dog起别名dog -->
    <s:iterator value="dogs" var="dog">
        <tr>
            <td><s:property value="#dog.name"/></td>
            <td><s:property value="#dog.breed"/></td>
        </tr>
    </s:iterator>
</table>
<br/><br/>

如果你确实需要每个Dog生成一个独立表格,可以参考如下写法:

<s:iterator value="dogs" var="dog">
    <table>
        <tr>
            <th>Name</th>
            <th>Breed</th>
        </tr>
        <tr>
            <td><s:property value="#dog.name"/></td>
            <td><s:property value="#dog.breed"/></td>
        </tr>
    </table>
    <br/><br/>
</s:iterator>

补充说明:如果不设置var属性,迭代时当前Dog实例会被压入值栈顶部,直接写属性名也可以取值:<s:property value="name"/>,加上var是为了代码可读性更高,避免和值栈中其他同名属性冲突。

内容的提问来源于stack exchange,提问作者parsecer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:15:03