簡體   English   中英

PrimeFaces,數據表過濾問題+ Ajax表更新

[英]PrimeFaces, Issues with Datatable Filtering + Ajax table update

我正在使用PF 3.5社區版,並且遇到以下問題。

我已經構造了一個數據表,該數據表將過濾器用於一列和可選行以及上下文菜單。

當我使用AJAX插入新條目(通過對話框)並更新數據表時,這似乎會產生某種沖突。 第一次插入始終有效,因為隨后的插入似乎從未調用動作偵聽器。 我用的是courseTable.filter(); 到處都有,但問題仍然存在。 我嘗試對具有過濾器和不可選擇的行的數據表以及沒有過濾器和可選擇的行的數據表執行相同的操作。 兩種情況都可以,但是組合存在問題。

<h:form id="mainForm">
        <p:focus />

        <!-- Main Data-table  -->
        <h:panelGrid style="width:700px;">

            <p:dataTable var="c" id="courseTable" widgetVar="courseTable"
                value="#{course.courseList}" rowKey="#{c.courseId}"
                selectionMode="single"
                filteredValue="#{course.filteredCourseList}">

                <p:ajax event="filter" global="false" />

                <f:facet name="header">
                    <p:commandButton value="Add Course" process="@this"
                        update="@this :courseForm" oncomplete="dlgInsertCourse.show()"/>
                </f:facet>

                <p:column id="courseCode" filterBy="#{c.courseCode}"
                    sortBy="#{c.courseCode}" filterMatchMode="contains"
                    headerText="Course Code">
                    <h:outputText value="#{c.courseCode}" />
                </p:column>

                <p:column id="courseName" filterBy="#{c.courseName}"
                    sortBy="#{c.courseName}"filterMatchMode="contains"
                    headerText="Course Name">
                    <h:outputText value="#{c.courseName}" />
                </p:column>

                <p:column id="courseType" filterBy="#{c.courseType}"
                    sortBy="#{c.courseType}"
                    filterOptions="#{course.courseTypeOptions}" 
                    headerText="Course Type" filterMatchMode="exact">
                    <h:outputText value="#{c.courseType}" />
                </p:column> 
            </p:dataTable>

        </h:panelGrid>

        <!-- Context Menu -->
        <p:contextMenu for="courseTable">

            <p:menuitem value="Edit" icon="ui-icon-pencil"
                update=":courseForm"
                oncomplete="dlgInsertCourse.show()"/>

                <p:menuitem value="Delete" icon="ui-icon-trash" update="@form"
                oncomplete="courseTable.filter();" />
        </p:contextMenu>
    </h:form>

    <!-- Insert Course Dialog  -->
    <p:dialog header="Create" widgetVar="dlgInsertCourse"
        draggable="true" resizable="false">
        <h:form id="courseForm">
            <p:panelGrid columns="1">

                <p:row>
                    <p:panelGrid columns="2">

                        <p:outputLabel value="Course Code: *"/>
                        <p:inputText label="Course Code"
                            value="#{course.course.courseCode}" />

                        <p:outputLabel value="Course Name: *"  />
                        <p:inputText label="CourseName"
                            value="#{course.course.courseName}" />

                        <p:outputLabel value="Course Type: *"  />
                        <p:selectOneRadio label="Course Type"
                            value="#{course.course.courseType}">
                            <f:selectItem itemLabel="Core" itemValue="Core" />
                            <f:selectItem itemLabel="Elective" itemValue="Elective" />
                        </p:selectOneRadio>

                    </p:panelGrid>
                </p:row>

            </p:panelGrid>

            <h:panelGroup style="display:block; text-align:center">
                <p:commandButton value="Submit" update="@form :mainForm :messages"
                    process="@form" 
                    oncomplete="if (!args.validationFailed) dlgInsertCourse.hide();"
                    actionListener="#{course.saveCourse()}"
                    />
            </h:panelGroup>
        </h:form>
    </p:dialog>

更詳細地:

  1. 在數據表中添加完之后,如果沒有應用過濾器,現在可以正常添加課程了
  2. 我還沒有使用courseTable.filter(); 在提交對話框上。 如果我使用它,即使沒有應用過濾器也無法添加課程
  3. 刪除似乎可以與我嘗試的任何設置完美配合(使用已應用的過濾器和未應用)。

找到解決方案。

似乎在后備bean中使用了另一個對象來存儲數據表選擇,而對於“插入課程對話框”使用了另一個對象解決了該問題。

在我的情況下,我都使用#{course.course} 現在,我添加了一個#{course.selectedCourse}來處理數據表。

當然,后備bean應該相應地更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM