مشكلة في تحديث الصفحة الحكيم مجموع في JSF DataTable عند استخدام Richfaces DataScroller

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

سؤال

أقوم بإنشاء DataTable في صفحة JSF الخاصة بي والتي تعرض تذييل كل عمود مع إجمالي القيم في صفحة العمود الحكيمة.

أنا أستخدم Richfaces DataScroller للترحيل.

عندما أنقر على الصفحة التالية في Richfaces DataScroller ، أحتاج إلى تحديث تذييل بلدي مع إجمالي قيم الأعمدة في تلك الصفحة ، والتي الآن مشكلة بالنسبة لي

تمكنت من إنشاء الرمز لحساب صفحة Wise Total باتباع هذه المناقشةhttp://forums.sun.com/thread.jspa؟threadid=5254959

عندما تمكنت الصفحة التي تحتوي على تحميلات DataTable من رؤية إجمالي العمود بشكل صحيح في تذييل التذييل. عندما أقوم بالنقر فوق الصفحة التالية في 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;
}

هذا هو الرمز الذي قمت بحسابه في Total Wise 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;              
}

ارجوك ساعدني لحل هذا

شكرا مقدما

هل كانت مفيدة؟

المحلول

بعد البحث المؤلم عن أسبوع ، وجدت A4J: JSFunction يحل المشكلة بالنسبة لي. هل هناك أي حل آخر أفضل من هذا؟ أنا حريص على معرفة ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top