寻找类似于ui的东西:重复在JSP中使用

时间:2011-08-25 14:38:28

标签: java jsp jsf

我只想迭代一个列表,我不希望任何html吐出来, 所以datalist和c:ForEach不是一个选择。 原因是,模型已经完成,我们必须使用 <ul><li>,因此我无法使用创建表格的任何内容。

我已经调查过并且ui:repeat会完成这项工作,但它在JSP中不起作用。

我希望在STRUTS逻辑中有类似的东西:迭代,因为我只需要迭代 在列表上。

感谢您的帮助。

约翰

2 个答案:

答案 0 :(得分:2)

<c:forEach>不会生成任何HTML。它只遍历集合或数组。它与<struts:iterate>完全相同,但是采用标准方式,并且使用JSP EL。

<ul>
    <c:forEach var="item" items="${myListOfItems}">
        <li><c:out value="${item.label}"/></li>
    </c:forEach>
</ul>

答案 1 :(得分:1)

目前还不完全清楚“datalist”究竟是什么意思,但如果省略layout属性,Tomahawk's <t:dataList>默认不会发出任何HTML,所以它应该适合你。< / p>

<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>将是一个更好的选择。