PF 3.5 コミュニティ エディションを使用していますが、次のような問題があります。
1 つの列と選択可能な行にフィルターを使用し、コンテキスト メニューと共に 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(); を使用していません。送信ダイアログで。使用する場合、フィルターを適用していなくてもコースを追加できません
- 削除は、私が試したどの設定でも完全に機能するようです(フィルターが適用され、適用されていない場合)。