I'm iterating over a list and want certain attributes of the current element to be rendered only when they're different from the previous element. Right now I have:
<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>
where
Object[] myListDataModelUnwrapped =
(Object[]) ((new ArrayList((List) myListDataModel.getWrappedData())).toArray());
What's a better way to access the previous/next element when iterating over a
ListDataModel
?How can I embed the list elements on
<ul></ul>
tags, rendering a valid unordered list below each category header?