【问题标题】:Primefaces Summary Row in multiple linesPrimefaces 多行摘要行
【发布时间】:2016-10-21 20:33:55
【问题描述】:

我有一个带有 SummaryRow 的简单 Primefaces 数据表。此 SummaryRow 的值在 ManagedBean 中计算,并在简单的 BigDecimal 变量中可用。数据表按字符串字段排序。

不知何故,DataTable 的每一行都显示了 summaryRow,而不是最后一行。

我已经搜索过这个,但没有找到任何相关内容。

我将 Primefaces 5.3 与 JSF 2.2 一起使用。

表: (https://drive.google.com/file/d/0Bw9aJmydXWmvdU8yTUkyYnp0Ums/view)

XHTML:

<p:dataTable 
id="rgmStoricoContrattiSogettoCapogruppoDataTable" 
value="#{storicoSoggettoProdottoBean.sogegettoProdottoList}" 
var="soggetto"
rendered="#{storicoSoggettoProdottoBean.isNdgMemberOfGroup()}"
styleClass="common_datagrid"
emptyMessage="Nessun valore presente"
sortBy="#{soggetto.denominazione}" >

<p:column headerText="Soggetto">
    <p:commandLink 
        value="#{soggetto.denominazione} #{soggetto.ndg} - #{soggetto.ndgCapogruppo}" 
        actionListener="#{storicoSoggettoProdottoBean.redirectSoggetoProdotto(request.contextPath, soggetto)}"
        immediate="true"
        process="@this" 
        style="font-size: 11px !important;" />
</p:column>

<p:column headerText="Rating And./Cerved" width="67" style="text-align: center">
    <h:outputText value="#{soggetto.rating} / #{soggetto.ratingCerved}" />
</p:column>

<p:column headerText="Perfez. storico" width="60" style="text-align: right">
    <h:outputText value="#{soggetto.perfezionato}">
        <f:convertNumber type="currency" currencySymbol="€"/>
    </h:outputText>
</p:column>

<p:column headerText="Accord." width="60" style="text-align: right">
    <h:outputText value="#{soggetto.accordato}">
        <f:convertNumber type="currency" currencySymbol="€"/>
    </h:outputText>
</p:column>

<p:column headerText="Utilizz." width="60" style="text-align: right">
    <h:outputText value="#{soggetto.utilizzato}">
        <f:convertNumber type="currency" currencySymbol="€"/>
    </h:outputText>
</p:column>

<p:column headerText="Sconfino" width="60" style="text-align: right">
    <h:outputText value="#{soggetto.sconfino}">
        <f:convertNumber type="currency" currencySymbol="€"/>
    </h:outputText>
</p:column>

<p:column headerText="In proposta" width="60" style="text-align: right">
    <h:outputText value="#{soggetto.inProposta}">
        <f:convertNumber type="currency" currencySymbol="€"/>
    </h:outputText>
</p:column>

<p:column headerText="Garanzie bancarie" width="60" style="text-align: right">
    <h:outputText value="#{soggetto.garanzieBancarie}">
        <f:convertNumber type="currency" currencySymbol="€"/>
    </h:outputText>
</p:column>

<p:column headerText="Rischio indiretto vs gruppo" width="87" style="text-align: center;">
    <h:outputText rendered="#{soggetto.rischioIndirettoVsGruppo == true}" value="SÍ" style="color: green; font-weight: bold;" />
</p:column>

<p:column headerText="Rischio indiretto vs terzi" width="60" style="text-align: right">
    <h:outputText value="#{soggetto.rischioIndirettoVsTerzi}">
        <f:convertNumber type="currency" currencySymbol="€"/>
    </h:outputText>
</p:column>

<p:column headerText="Rischio pond." width="60" style="text-align: right">
    <h:outputText value="#{soggetto.rischioPonderato}">
        <f:convertNumber type="currency" currencySymbol="€"/>
    </h:outputText>
</p:column>

<p:column width="25">
    <p:commandButton 
        action="#{storicoSoggettoProdottoBean.redirectToStoricoPlafond(request.contextPath, soggetto)}"
        immediate="true"
        process="@this"
        icon="fa fa-file-text-o" 
        styleClass="imageButton" 
        style="height: 12px;" />
</p:column>

<p:summaryRow>
    <p:column styleClass="totaleRowColor" style="text-align: right;">
        <h:outputText value="Totale:" style="font-weight: bold; text-transform: uppercase;" />
    </p:column>

    <p:column styleClass="totaleRowColor" width="67" />

    <p:column styleClass="totaleRowColor" style="text-align: right;" width="60">
        <h:outputText value="#{storicoSoggettoProdottoBean.perfezionatoSoggettoSum}">
            <f:convertNumber type="currency" currencySymbol="€"/>
        </h:outputText>
    </p:column>

    <p:column styleClass="totaleRowColor" style="text-align: right;" width="60">
        <h:outputText value="#{storicoSoggettoProdottoBean.accordatoSoggettoSum}">
            <f:convertNumber type="currency" currencySymbol="€"/>
        </h:outputText>
    </p:column>

    <p:column styleClass="totaleRowColor" style="text-align: right;" width="60">
        <h:outputText value="#{storicoSoggettoProdottoBean.utilizzatoSoggettoSum}">
            <f:convertNumber type="currency" currencySymbol="€"/>
        </h:outputText>
    </p:column>

    <p:column styleClass="totaleRowColor" style="text-align: right;" width="60">
        <h:outputText value="#{storicoSoggettoProdottoBean.sconfinoSoggettoSum}">
            <f:convertNumber type="currency" currencySymbol="€"/>
        </h:outputText>
    </p:column>

    <p:column styleClass="totaleRowColor" style="text-align: right;" width="60">
        <h:outputText value="#{storicoSoggettoProdottoBean.inPropostaSoggettoSum}">
            <f:convertNumber type="currency" currencySymbol="€"/>
        </h:outputText>
    </p:column>

    <p:column styleClass="totaleRowColor" style="text-align: right;" width="60">
        <h:outputText value="#{storicoSoggettoProdottoBean.garanzieBancarieSoggettoSum}">
            <f:convertNumber type="currency" currencySymbol="€"/>
        </h:outputText>
    </p:column>

    <p:column styleClass="totaleRowColor" width="87" />

    <p:column styleClass="totaleRowColor" style="text-align: right;" width="60">
        <h:outputText value="#{storicoSoggettoProdottoBean.rischioIndirettoVsTerziSoggettoSum}">
            <f:convertNumber type="currency" currencySymbol="€"/>
        </h:outputText>
    </p:column>

    <p:column styleClass="totaleRowColor" style="text-align: right;" width="60">
        <h:outputText value="#{storicoSoggettoProdottoBean.rischioPonderatoSoggettoSum}">
            <f:convertNumber type="currency" currencySymbol="€"/>
        </h:outputText>
    </p:column>

    <p:column styleClass="totaleRowColor" width="25" />
</p:summaryRow>

【问题讨论】:

    标签: jsf jsf-2 primefaces datatable jsf-2.2


    【解决方案1】:

    this question 中所述,您必须在 p:dataTable 标记上提供 sortBy 属性才能使摘要行起作用(就像您在代码 sn-p 中所做的那样)。 Primefaces 使用 sortBy 标记中的表达式对表条目进行分组,然后为每个组提供一个摘要行。

    为了只获得一组,我尝试了这个:

    <p:dataTable sortBy="#{1}" ...>
    

    对我来说很好,我现在只得到一个汇总行和我的总计。

    【讨论】:

      【解决方案2】:

      不确定列上的 colspan 属性是否是预期结果所必需的...?

      如果您不知道,请查看 Primefaces 展示以获取示例:http://www.primefaces.org/showcase/ui/data/datatable/summaryRow.xhtml

      【讨论】:

      • 嗨!谢谢你的回答。事实上,我发现了问题所在。我在想我可以使用 Primefaces 的 SummaryRow 组件来放置“Total”行,但摘要行以不同的方式工作。每次值更改时,摘要行都会插入一个新行。
      • 我建议您在以后为其他用户提供答案:)
      • 嗨,保罗,你是如何解决这个问题的。我也有同样的问题。你能分享一个代码示例吗?
      【解决方案3】:

      摘要行使用 sortBy 表达式,因此如果您使用 sortBy 即唯一 ID,那么 Primefaces 将始终为表中的每一行提供一个摘要行。使用类似 Ginkobonsai 的 sortBy 常量建议 sortBy="#{1}" 是一个好主意,您也可以在 POJO 中使用常量字段。

      【讨论】:

        【解决方案4】:

        您可以使用所有行共享的某些数据的 sortby 值。

        例如,如果您使用 var soggetto

        那么您可以在该类上拥有一个在所有对象中都相等的字段。

        例如soggetto.dummysortby

        在 getDummySortBy 类中返回 1。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多