gpt4 book ai didi

java - PrimeFaces,数据表过滤 + Ajax 表更新的问题

转载 作者:行者123 更新时间:2023-12-01 04:31:24 25 4
gpt4 key购买 nike

我正在使用 PF 3.5 社区版,但遇到以下问题。

我构建了一个数据表,该数据表对一列和可选择的行以及上下文菜单使用过滤器。

当我使用 AJAX 插入新条目(通过对话框)并更新数据表时,这似乎会产生某种冲突。第一个插入总是有效,后续插入似乎永远不会调用 Action 监听器。我使用 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. 添加数据表后,如果没有应用过滤器,现在我可以正常添加类(class)
  2. 我没有使用过 courseTable.filter();在提交对话框上。如果我使用它,即使我没有应用过滤器,我也无法添加类(class)
  3. “删除”似乎与我尝试的任何设置都能完美配合(应用过滤器和未应用过滤器)。

最佳答案

找到解决方案。

似乎在支持 bean 中使用不同的对象来存储数据表选择,并且“插入类(class)对话框”使用不同的对象解决了问题。

就我而言,我在两者中都使用了#{course.course}。现在我添加了一个 #{course.selectedCourse} 来处理数据表。

当然,支持 bean 应该相应地更新。

关于java - PrimeFaces,数据表过滤 + Ajax 表更新的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17944513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com