你想要在在JSTL c:forEach循环而不是Struts logic:iterate循环中通过Struts html标签使用索引属性。
为了创建一个简单索引属性的字段,可使用bean:define标签将循环计数暴露为一个可用于运行时表达式的脚本变量:
如果索引属性是一个嵌套的bean 并且你使用的是indexed="true" 属性,那么可以将Struts logic:iterate标签替换为JSTL c:forEach:
JSTL的c:forEach标签提供了一些额外的功能并且比logic:iterate更加易用。需要循环遍历的条目可以通过使用EL来指定。JSTL 标签允许对集合的子集上进行更多的控制,并且循环状态的细节也很容易获得。然而,如同所有JSTL标签一样,没有脚本变量被创建。我们在其他招式中所过,在处理索引属性时,不得不使用脚本变量。特别是如果你没有使用struts-el标签库更是如此。
bean:define标签从JSTL创建的范围变量中创建一个基本变量。这个bean:define标签基于取自value属性或者标签体的值创建了一个新的范围变量和对应的脚本变量。后一种方式在JSTL和Struts标签之间建立了一个桥。在这一招中,bean:define标签用于创建一个包含可用于访问索引属性的索引的变量。你可以在第3.4式中的选择喜好颜色的标但中使用这种技术。
根据第3.4式,你可以使用Struts-El标签来消除scriptlet:
如果需要为一个对象的嵌套属性创建一个HTML 输入字段,而该对象是一个索引属性,那么请在Struts html 标签中指定indexed="true" 属性。indexed属性的用法在使用JSTL c:forEach循环和使用logic:iterate循环时是一样的。下面是这种技术如何使用在第3.4式中的表单的喜好链接部分:
渲染后的索引值被正确产生,哪怕是使用了begin, end, 和step属性来控制循环。下面的c:forEach用法演示了如何为集合的第1个和第3个元素产生输入字段:
这将产生下面的HTML:
为了在循环中渲染动态数据以供显示,JSTL 工作的很好,并且比对赢得Struts 标签更易使用。你可以看到,JSTL 在访问索引属性方面比Struts 标签支持的更好。例如,下面的代码就展示了喜好颜色可以如何显示:
第3.4式演示了索引属性的类似用法。
你可以参考JSTL 的相关文档和信息,以及书籍。JSTL规范参见http://java.sun.com/jsp/jstl.
posted on 2005-06-01 14:43 铁手 阅读(4118) 评论(1) 编辑 收藏 所属分类: Java 、Struts系列