我有每个项目(Apple,Banana)的动态测试次数(测量值),每个测试都有2个属性(强制,可见)。我需要的是将这些测试显示为列(colspan = 2)及其属性(colspan = 1)的表,如下例所示。我可以为表头执行它(使用Primefaces的p:columnGroup)但我不知道如何在迭代属性列表时为每个Property填充两列。
我只有想法是制作新的List,其中每个项目将存在两次(直径,直径,长度,长度),迭代它并使用一些模数条件来选择正确的属性。
我目前的解决方案是:
XHTML
<p:dataTable var="scenario">
...
<p:columns var="property" value="#{view.getXTimesProperties()}"
columnIndexVar="index">
<c:set var="test" value="#{view.getTest(scenario, property)}"/>
<c:choose>
<c:when test="${index % 2 == 0}">
<h:outputText value="#{test.mandatory}"/>
</c:when>
<c:when test="${index % 2 == 1}">
<h:outputText value="#{test.visible}"/>
</c:when>
</c:choose>
</p:columns>
</p:dataTable>
和View方法是
public List<Property> getXTimesProperties() {
List<Property> list = new ArrayList<>(properties.size() * 2);
for (Property property : properties) {
list.add(property);
list.add(property);
}
return list;
}
有更好的方法吗?提前感谢您提出更好的想法!
答案 0 :(得分:0)
是的,更好的方式(Kukeltje学分):
<p:dataTable var="scenario">
...
<c:forEach var="property" items="#{view.properties}">
<c:set var="test" value="#{view.getTest(scenario, property)}"/>
<p:column>
<h:outputText value="#{test.mandatory}"/>
</p:column>
<p:column>
<h:outputText value="#{test.visible}"/>
</p:column>
</c:forEach>
</p:dataTable>