Primefaces - 根据汽车品牌

时间:2016-09-02 11:57:11

标签: jsf jsf-2 primefaces datatable

使用Primefaces DataTable - Edit中的示例我已将“年”列更改为显示“价格”。在sortBy="#{car.brand}"<p:dataTable>中添加了<p:summaryRow>过滤条件,以显示每个汽车品牌的计算小计(根据Primefaces DataTable - Summary Row)。然后是一个显示计算总计的页脚。

<f:facet name="footer">
    <h:outputText id="carstotal" value="Total: $#{dtEditView.totalSales}" />
</f:facet>

为了计算我在 EditView.java 中创建此方法的总数:

public Integer getTotalSales() {
    Integer total = 0;
    for (Car car : cars2) {
        total += car.getPrice();
    }
    return total;
}

但是我坚持如何用另一种方法计算相同品牌的小计。如果数据表价格单元是可编辑的,有没有办法做到这一点?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我设法解决了获取相同品牌小计的方法。但是当我更改单元格中的价格值时,它只更新总数。我在 EditView.java

中添加了以下代码
<ul>
  <li>Option1
    <ul>
      <li>OptionA</li>
      <li>OptionB</li>
    </ul>
  </li>
  <li>Option2</li>
</ul>

cars.xhtml

public void init() {
    ...
        cars2.stream().filter(car -> !brands.contains(car.getBrand())).forEach(car -> brands.add(car.getBrand()));
        Collections.sort(brands);
    ...
}

public Integer getSubTotalSales() {
    Integer total = 0;
    for (Car car : cars2) {
        if (Objects.equals(car.getBrand(), brands.get(callCounter))) {
            total += car.getPrice();
        }
    }
    callCounter++;
    return total;
}

public Integer getTotalSales() {
    Integer total = 0;
    for (Car car : cars2) {
            total += car.getPrice();
    }
    return total;
}