gpt4 book ai didi

jsf - 带子表和多项选择的 Primefaces 数据表

转载 作者:行者123 更新时间:2023-12-02 05:24:32 24 4
gpt4 key购买 nike

我想要一张按客户分组的预订表。从该表中,用户应能够选择多个预订进行计费。所以我尝试使用子表进行分组,但是,我不确定如何实现选择功能。显然子表不允许选择属性,如果我在父数据表上设置选择属性,我不知道如何选择 rowKey。

这是我的尝试:

<p:dataTable style="border: 0px;" value='#{clientController.allClients}'
var='client' rowKey="#{item.id}" selectionMode="multiple"
selection="#{bookingController.bookingsToBill}">
<p:subTable value='#{client.billableBookings}' var='item'>
<f:facet name="header">
<h:outputText style="font-weight:bold;" value="#{client.name}" />
</f:facet>
<p:column>
<f:facet name="header">
<h:outputText value="Booking"/>
</f:facet>
<h:outputText value="#{item.title}"/>
</p:column>
</p:subTable>
</p:dataTable>

好吧,这会在提交选择时导致以下错误:

java.lang.NullPointerException
java.lang.reflect.Array.newArray(Native Method)
java.lang.reflect.Array.newInstance(Array.java:52)
org.primefaces.component.datatable.DataHelper.decodeMultipleSelection(DataHelper.java:238)
org.primefaces.component.datatable.DataHelper.decodeSelection(DataHelper.java:224)
org.primefaces.component.datatable.DataTableRenderer.decode(DataTableRenderer.java:64)
javax.faces.component.UIComponentBase.decode(UIComponentBase.java:787)
javax.faces.component.UIData.processDecodes(UIData.java:1162)
org.primefaces.component.datatable.DataTable.processDecodes(DataTable.java:531)
javax.faces.component.UIForm.processDecodes(UIForm.java:225)
javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)
javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)
javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:933)
com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)

带有子表的数据表是否支持多重选择?如果是这样,该怎么做才正确呢?如果没有,您建议采用哪种方式来达到类似的结果?

我正在使用:Primefaces 3.1.1 - Mojarra JSF 2.1 - Tomcat 6.0.14

最佳答案

你分析过this solution吗? Primefaces 的展示中有描述吗?

它基本上可以归结为:

<p:dataTable style="border: 0px;" value='#{clientController.allClients}' 
var='client' rowKey="#{item.id}"
selection="#{bookingController.bookingsToBill}" >
<p:subTable value='#{client.billableBookings}' var='item'>
<f:facet name="header">
<h:outputText style="font-weight:bold;" value="#{client.name}" />
</f:facet>
<p:column selectionMode="multiple" />
<p:column>
<f:facet name="header">
<h:outputText value="Booking"/>
</f:facet>
<h:outputText value="#{item.title}"/>
</p:column>
</p:subTable>
<小时/>

或者尝试使用绑定(bind)到 BookingController 的 ajax 事件监听器:

<p:ajax event="rowSelect" listener="#{bookingController.rowSelected}" />
<p:ajax event="rowUnselect" listener="#{bookingController.rowUnselected}" />

并且您可以在这两个函数中更新自己的所选项目列表:

List<Booking> selectedBookings = new ArrayList<>();
...
public void rowSelected(SelectEvent event) {
Booking book = (Booking) event.getObject();
selectedBookings.add(book);
}

public void rowUnselected(UnselectEvent event) {
Booking book = (Booking) event.getObject();
selectedBookings.remove(book);
}

这不是很优雅,但在得到这个相当晦涩的 NullPointerException 后,它使我的逻辑正常工作。

关于jsf - 带子表和多项选择的 Primefaces 数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9331429/

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