【发布时间】:2017-10-30 14:34:21
【问题描述】:
我有每个项目(苹果、香蕉)的动态测试(测量)数量,每个测试都有 2 个属性(强制,可见)。我需要的是将这些测试显示为列 (colspan=2) 及其属性 (colspan=1) 的表格,如下例所示。我可以为表头执行此操作(使用 Primefaces 的 p:columnGroup),但我不知道如何在遍历属性列表时为每个属性填充两列。
我唯一的想法是创建新列表,其中每个项目将存在两次(直径、直径、长度、长度),对其进行迭代并使用一些模条件来选择正确的属性。
我目前的解决方案是:
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;
}
有没有更好的方法?提前感谢您提供更好的想法!
【问题讨论】:
-
如果 coumns 没有动态变化(例如通过 ajax),您可以使用
c:foreach来创建列数。循环遍历每个测试并在其中创建 2coloumns -
感谢您的建议!我太专注于 p:columns。这对我来说是完美的。
标签: jsf primefaces