使用RichFaces datascroller时在JSF数据表中更新页面总数的问题

时间:2010-08-04 12:53:44

标签: jsf datatable richfaces datascroller

我正在我的JSF页面中创建一个数据表,该页面显示每列的页脚以及列页面中的总值。

我使用Richfaces datascroller进行分页。

当我点击richfaces datascroller中的下一页时,我需要使用该页面中的总值更新我的页脚,现在这对我来说是个问题

我设法通过以下讨论创建了计算页面总数的代码 http://forums.sun.com/thread.jspa?threadID=5254959

当带有数据表加载的页面设法在页脚中正确查看列的总数时。当我在datascroller中单击下一页时,仍然保留相同的值 例如,当第一页的列总数为5而第二页的列为3时。

我设法正确显示5,当我点击下一页时,我需要将其更新为3,但是5保持不变。

当我点击datascroller中的下一个按钮时,似乎只有数据表主体得到更新。 Richfaces或JSF中是否有一种方法可以让页脚在每次点击时获得更新?或者除了Richfaces datascroller之外还有其他任何替代方法可以解决我的问题吗?

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

请帮我解决这个问题

提前致谢

1 个答案:

答案 0 :(得分:1)

经过一周的痛苦搜索,我找到了a4j:jsFunction为我解决了这个问题。有没有比这更好的其他解决方案?我很想知道它。