在列的页脚上显示数据表列的总和

时间:2014-07-12 13:57:36

标签: jsf primefaces jsf-2.2

例如,

<p:dataTable var="price" value="#{testManagedBean.price}" rowIndexVar="rowIndex">

    <p:column headerText="Index">
        <h:outputText value="#{rowIndex+1}"/>
    </p:column>

    <p:column headerText="Price" style="text-align: right;">
        <h:outputText value="#{price}"/>

        <f:facet name="footer">
            <c:set var="total" value="${total+price}"/>
            <h:outputText value="#{total}"/>
        </f:facet>
    </p:column>
</p:dataTable>

托管bean:

@ManagedBean
@ViewScoped
public final class TestManagedBean implements Serializable
{
    private List<BigDecimal>price;
    private static final long serialVersionUID = 1L;

    @PostConstruct
    public void init()
    {
        price=new ArrayList<>();
        price.add(new BigDecimal(50));
        price.add(new BigDecimal(100));
        price.add(new BigDecimal(150));
        price.add(new BigDecimal(200));
        price.add(new BigDecimal(250));
        price.add(new BigDecimal(300));
    }

    public List<BigDecimal> getPrice() {
        return price;
    }
}

项目列表的总数将显示在页脚上。

这是否可以使用JSTL进行此求和或者没有在辅助bean本身中进行此求和的方法?

目前,JSTL <c:set>的操作会在相关列的页脚上产生0

1 个答案:

答案 0 :(得分:1)

这样的事情对我有用:

        <c:set var="total" value="0"/>
        <c:forEach items="#{testManagedBean.price}" var="t">
            <c:set var="total" value="#{total + t}"/>
        </c:forEach>
        <h:outputText value="#{total}"/>

我不会拒绝它可以优化的想法: - )