1
我正在使用PF 3.5社區版,我遇到以下問題。PrimeFaces,數據過濾問題+ Ajax表更新
我已經構建了一個Datatable,它爲一列和可選行以及上下文菜單使用過濾器。
當我使用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>
更詳細地:
- 我在數據表中加完後,現在我可以正常如果我不應用濾波器添加課程
- 我還沒有使用courseTable.filter();在提交對話框中。如果我使用它,即使我沒有應用過濾器,我也無法添加課程
- 刪除似乎與我嘗試的任何設置(應用過濾器和未應用)完美配合。