我只是想遍历一个列表,我不想要任何html文件,所以datalist和c:ForEach不是一个选项。原因是,模型已经制作好了,按照规则我们必须使用<ul>
和<li>
,所以我不能使用任何创建表。
我已经调查过了,ui:repeat可以完成这项工作,但是它在JSP中不起作用。
我希望在STRUTS逻辑中有类似的东西:迭代,因为我只需要迭代
谢谢你的帮助。
约翰<c:forEach>
不生成任何HTML。它只迭代一个集合或数组。它所做的事情与<struts:iterate>
完全相同,但是以标准的方式,并使用JSP EL。
<ul>
<c:forEach var="item" items="${myListOfItems}">
<li><c:out value="${item.label}"/></li>
</c:forEach>
</ul>
我不太清楚你说的"datalist"是什么意思,但是如果你省略了layout
属性,Tomahawk的<t:dataList>
默认情况下不会发出任何HTML,所以它应该为你工作。
<ul>
<t:dataList value="#{memberHandler.subTypes}" var="subType">
<li><h:outputText value="#{subType.fullSubtypeDisplayName}"/></li>
</t:dataList>
</ul>
顺便说一下,设置layout="unorderedList"
应该呈现与上面示例完全相同的<ul><li>
:
<t:dataList value="#{memberHandler.subTypes}" var="subType" layout="unorderedList">
<h:outputText value="#{subType.fullSubtypeDisplayName}"/>
</t:dataList>
当在引用托管bean值的JSP模板上使用JSTL <c:forEach>
时,您依赖于所使用的JSP版本以及JSF是否已经事先自动创建了托管bean。当使用Servlet 2.5/JSP 2.1时,您应该能够在JSTL标记中使用#{}
:
<ul>
<c:forEach value="#{memberHandler.subTypes}" var="subType">
<li><h:outputText value="#{subType.fullSubtypeDisplayName}"/></li>
</c:forEach>
</ul>
当使用Servlet 2.4/JSP 2.0时,您应该坚持使用${}
并使用<c:out>
而不是<h:outputText>
,并确保JSF已经通过#{}
在视图模板中预先自动创建了托管bean,这会触发自动创建bean,而${}
不会。
<h:someComponent value="#{memberHandler.someThing}" />
...
<ul>
<c:forEach value="${memberHandler.subTypes}" var="subType">
<li><c:out value="${subType.fullSubtypeDisplayName}"/></li>
</c:forEach>
</ul>
战斧的<t:dataList>
在这里会是更好的选择。