Problema na atualização da página Total no JSF DataTable ao usar o Richfaces DataScroller

StackOverflow https://stackoverflow.com/questions/3405654

Pergunta

Estou criando um DataTable na minha página JSF que mostra o rodapé para cada coluna com o total de valores na página da coluna.

Estou usando o Richfaces DataScroller para paginação.

Quando clico na próxima página em Richfaces DataScroller, preciso atualizar meu rodapé com o total dos valores da coluna nessa página, que agora é um problema para mim

Consegui criar o código para calcular o total de páginas, seguindo esta discussãohttp://forums.sun.com/thread.jspa?threadid=5254959

Quando a página com as cargas do DataTable, consegui ver o total da coluna corretamente no rodapé. Quando clico em Página Próxima no DataScroller, o mesmo valor permanece.
Por exemplo, quando o total da coluna da primeira página é 5 e a segunda página é 3.

Consegui mostrar 5 corretamente, quando clico na próxima página, preciso que ela seja atualizada para 3, mas 5 permanece inalterado.

Parece que apenas o corpo do Datatable é atualizado quando clico no botão Avançar no DataScroller. Existe uma maneira de Richfaces ou JSF que faz o rodapé ser atualizado em todos os cliques? Ou existe alguma outra alternativa além do Richfaces DataScroller que resolve meu problema?

Meu código JSF é

<h:dataTable id="summary" binding="#{outboundCall.summaryTable}">

                                </h:dataTable>
                                <rich:datascroller reRender="summary" for="summary" style="width:623px;font-family : Verdana;font-weight: bold;">

                                </rich:datascroller>

Meu código Java é

public HtmlDataTable getSummaryTable() 
{
    summaryTable = new HtmlDataTable();
    summaryTable.setRowClasses("datatablecontent");
    summaryTable.setColumnClasses("datatablecontent");
    summaryTable.setHeaderClass("datatableheader");
    summaryTable.setFooterClass("datatablecontent");
    summaryTable.setVar("data");
    summaryTable.setRows(5);
    //summaryTable.setId("summaryTable");
    summaryTable.setValueExpression("value", createValueExpression("#{outboundCall.summaryReports}", List.class));
    summaryTable.setRendered(getDataTableRendered());

    HtmlColumn column1 = getColumnDetails("Dialled Date", "#{data.dialledDate}");
    HtmlOutputText footerText1 = new HtmlOutputText();
    footerText1.setValue("Total");        
    column1.setFooter(footerText1);
    summaryTable.getChildren().add(column1);

    if(getStatus().equalsIgnoreCase("success") || getStatus().equalsIgnoreCase("all"))
    {
        System.out.println("Before footer calculation");
        int subTotalPrice = 0;
        for (int i = summaryTable.getFirst(); 
                 i < summaryTable.getFirst() + summaryTable.getRows() && 
                 i < getSummaryReports().size(); i++) 
        {
            SummaryReportsForOutBoundCalls dataItem = getSummaryReports().get(i);
            String dataItemPrice = dataItem.getSuccessCount();
            subTotalPrice += Integer.parseInt(dataItemPrice);
            dataItem.setTotalCallsTotal(Integer.toString(subTotalPrice));
        }

        setFooterTotalToDisplay(Integer.toString(subTotalPrice));
        HtmlColumn column2 = getColumnDetails("Success", "#{data.successCount}");
        HtmlOutputText footerText2 = new HtmlOutputText();
        footerText2.setValue(subTotalPrice);
        column2.setFooter(footerText2);

        summaryTable.getChildren().add(column2);            
    }

    return summaryTable;
}

Este é o código em que calculei a página total

public List<SummaryReportsForOutBoundCalls> getSummaryReports() 
{
    int total = 0;

    //getSummaryTable();

    for (int i = summaryTable.getFirst(); 
     i < summaryTable.getFirst() + summaryTable.getRows() && 
     i < summaryReports.size(); i++) 
    {
        SummaryReportsForOutBoundCalls dataItem = summaryReports.get(i);
        String dataItemPrice = dataItem.getSuccessCount();
        total += Integer.parseInt(dataItemPrice);
        dataItem.setTotalCallsTotal(Integer.toString(total));

    }       
    scroller.setOncomplete("setValue('"+total+"')");
    scroller.setOnclick("setValue('"+total+"')");
    setFooterTotalToDisplay(Integer.toString(total));
    footerText2.setValue(total);

    return summaryReports;              
}

Por favor me ajude a resolver isso

desde já, obrigado

Foi útil?

Solução

Depois de uma busca dolorosa por uma semana, encontrei o A4J: JSFunction resolve o problema para mim. Existe alguma outra solução melhor do que isso? Estou ansioso para saber sobre isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top