我在列表上进行迭代,并希望当前元素的某些属性仅在它们与前一个元素不同时才呈现。现在我有:
<ui:repeat value="#{myBean.myListDataModel}" var="item" varStatus="itemStatus">
<ui:fragment rendered="#{
itemStatus.first
or (myBean.myListDataModelUnwrapped[itemStatus.index-1].category ne item.category)
}">
<h1>
<h:outputText value="#{item.category}"/>
</h1>
<!-- can't open a ul here -->
</ui:fragment>
<li>
<h:outputText value="#{item.name}"/>
</li>
<ui:fragment rendered="#{
itemStatus.last or
(myBean.myListDataModelUnwrapped[itemStatus.index+1].category ne item.category)
}">
<!-- can't close a ul here -->
</ui:fragment>
</ui:repeat>
,其中
Object[] myListDataModelUnwrapped =
(Object[]) ((new ArrayList((List) myListDataModel.getWrappedData())).toArray());
在迭代ListDataModel
时,访问上一个/下一个元素的更好方法是什么?
如何在<ul></ul>
代码上嵌入列表元素,在每个类别标题下方呈现有效的无序列表?
答案 0 :(得分:1)
对于第二个问题,作为解决方法,您可以使用<ul></ul>
打开和关闭h:outputText
,如下所示:
xhtml代码:
<h:outputText value="#{testMB.ulStartTag}" escape="false"/>
...
<h:outputText value="#{testMB.ulEndTag}" escape="false"/>
托管bean代码:
public String getUlStartTag() {
return "<ul>";
}
public String getUlEndTag() {
return "</ul>";
}
ps:不要试图将"<ul>"
作为h:outputText
的值直接写入xhtml,它会在运行时失败,因为&#34;&lt;&#34;和&#34;&gt;&#34;字符。