Проблема с обновлением общего количества страниц в таблице данных JSF при использовании прокрутки данных RichFaces

Я создаю таблицу данных на своей странице JSF, которая показывает нижний колонтитул для каждого столбца с общим количеством значений на странице столбца.

Я использую прокрутку данных Richfaces для пейджинга.

Когда я нажимаю следующую страницу в прокрутке данных richfaces, мне нужно обновить нижний колонтитул, указав общее количество значений столбца на этой странице, что теперь для меня проблема.

Мне удалось создать код для расчета общего количества страниц, следуя этому обсуждению http://forums.sun.com/thread.jspa?threadID=5254959

Когда страница с данными загружается, мне удалось правильно увидеть общее количество столбцов в нижнем колонтитуле. Когда я нажимаю следующую страницу в прокрутке данных, остается то же значение.
Например, когда общее количество столбцов на первой странице равно 5, а на второй странице – 3.

Мне удалось показать 5 правильно, когда я нажимаю следующую страницу, мне нужно, чтобы она обновилась до 3, но 5 остается неизменной.

Похоже, что только тело с данными обновляется, когда я нажимаю следующую кнопку в прокрутке данных. Есть ли способ в Richfaces или JSF, чтобы нижний колонтитул обновлялся при каждом клике? Или есть какая-то другая альтернатива, кроме прокрутки данных Richfaces, которая решает мою проблему?

Мой код 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>

Мой 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;
}

Это код, в котором я рассчитал общее количество страниц

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;              
}

Пожалуйста, помогите мне решить это

заранее спасибо


person mvg    schedule 04.08.2010    source источник
comment
не могли бы вы опубликовать полный код кода jsf?   -  person Dejell    schedule 05.08.2010
comment
Извините за опоздание. Я не мог получить вас точно. Какую часть вы хотите JSP или Java?   -  person mvg    schedule 06.08.2010
comment
asp.net имеет свойство обновлять нижний колонтитул forums.asp.net/t/1512760.aspx Есть ли способ сделать подобное в JSF?   -  person mvg    schedule 06.08.2010


Ответы (1)


После мучительных поисков в течение недели я обнаружил, что a4j:jsFunction решает проблему за меня. Есть ли другое решение лучше этого? Я жажду узнать об этом.

person mvg    schedule 08.08.2010