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
相关产品推荐
相关产品推荐

