JSF重复行分组或groupRow

时间:2018-04-15 03:51:42

标签: jsf primefaces uirepeat

我对JSF不太好,我已经搜索过,但无法在网上找到类似的答案,请我需要帮助。我有一套下面的示例表可以增长,但不确定每辆车有多少行。

...................................................
| ID         | Car        | Year       | Colour   |
|.................................................|
| 37efcc3e   | Audi       | 1994       | Green    |
| 2aacdbd4   | Audi       | 2009       | Yellow   |
| 5dd57389   | BMW        | 1989       | Green    |
| 94f32d8a   | BMW        | 1978       | Orange   |
| d03b3af1   | BMW        | 2001       | Green    |
| 7ca88a0b   | Ford       | 1964       | Silver   |

我希望使用div来实现此目的,如下所示

Audi
1994   Green     37efcc3e
2009   Yellow    2aacdbd4

BMW    
1989   Green     5dd57389
1978   Orange    94f32d8a
2001   Green     d03b3af1

Ford
1964   Silver    7ca88a0b

我如何使用JSF或Primefaces 重复而不是dataTable来实现这一点。
用普通的java

List<Product> productList;
for (Product product1 : productList) {
  for (Product product2 : productList) {
    if(product1.getCar().equals(product2.getCar())) {//check if car changes

    }
  }
}
Or can use set
Set<Product> set = new HashSet<Product>(productList);
if(set.size() < list.size()){//check if car changes

}

Primefaces有行分组或带有表的组行,我只是想知道如何用重复方法做到这一点

1 个答案:

答案 0 :(得分:0)

在JSF中执行此操作与在普通Java中执行此操作并没有什么不同

Pseudocode java

假设有一个排序列表(就像在你的表中那样然后排序)所以不需要额外重写支持模型

for(int i=0; i<cars.size();i++) {
    if (i==0 || !cars[i].getBrand().equals(car[i-1].getBrand())) {
       System.out.println(cars[i].getBrand());
    }
    System.out.println(cars[i].type + "\t" +cars[i].color + "\t" + cars[i].year);
}

在JSF中(也是'伪代码',未经测试)

<table>
  <ui:repeat var="car" value="#{bean.cars}" varStatus="myVarStatus">

    <ui:fragment  rendered="#{myVarStatus.index == 0 || !bean.cars.get(myVarStatus.index).brand.equals(bean.cars.get(myVarStatus.index -1).brand}">
        <tr><td colspan="3"><h:outputText value="#{car.brand}"></td></tr>
    </ui:fragment>

    <tr>
       <td>#{car.type}</td>
       <td>#{car.color}</td>
       <td>#{car.year}</td>
    </tr>

  </ui:repeat>
</table>