2012-02-17 21 views
4

クライアントごとにグループ化された予約テーブルを用意したいと思います。このテーブルから、ユーザは請求のために複数の予約を選択することができます。だから私は、グループ化のためにSubTableを使用しようとしていますが、私は選択機能を実現する方法がわかりません。どうやらサブテーブルはselection属性を許可しておらず、親DataTableのselection属性を設定した場合、rowKeyの選択方法はわかりません。Primefaces SubTableと複数の選択を持つDataTable

私の試みです:選択を提出する際

<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) 

はサブテーブルとDataTableのためにサポートされる複数の選択ですか?もしそうなら、それをどうやって行うのですか?そうでない場合は、同様の結果を達成するためにどのように提案しますか?

私が使用しています:Primefaces 3.1.1 - クロサギ科JSF 2.1 - Tomcatの6.0.14

答えて

1

あなたはPrimefaces'ショーケースで説明this solutionを分析したことがありますか?

それは基本的にこれに沸く:

<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> 

またはあなたのBookingControllerにバインドされた、AJAXイベントリスナーで試してみてください。

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

そして、あなたが選択した項目の独自のリストを更新しますこれら2つの機能では、

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を取得した後に私のロジックを動作させました。

+0

jfs、このソリューションはあなたのために機能しましたか? – JackDev

+0

関連トピックhttp://forum.primefaces.org/viewtopic.php?f=3&t=18502 – JackDev

関連する問題