2012-05-07 48 views
4

PrimeFacesのデータテーブルで複数の選択肢が表示されないようです。PrimeFaces:DataTableの複数の選択が機能しない

<p:dataList value="#{clientController.allClients}" var="client"> 
<p:column> 
    <p:dataTable value='#{client.bookingsDataModel}' var='item' selection="#{client.bookingsToBill}"> 
     <p:column selectionMode="multiple" /> 
    </p:dataTable> 
</p:column> 
</p:dataList> 

私のコントローラとバッキングBeanクラス:

を私はクライアント(データリスト)のリストを実装し、課金のために複数の予約を選択することが可能で、ネストされたDataTableの内のそれぞれの予約を表示しようとしている

public class ClientController { 
    public List<Client> getAllClients() { 
     return clients; 
    } 
} 

public class Client { 

    private List<Booking> bookings; 
    private Booking[] bookingsToBill; 

    public LeistungDataModel getBookingsDataModel() { 
     return new BookingsDataModel(bookings); 
    } 

    public Booking[] getBookingsToBill() { 
     return bookingsToBill; 
    } 

    public void setBookingsToBill(Booking[] bookingsToBill) { 
     this.bookingsToBill = bookingsToBill; 
    } 

} 

データ・モデル・クラス:

public class BookingsDataModel extends ListDataModel<Booking> implements SelectableDataModel<Booking> {  

    public BookingsDataModel(List<Booking> data) { 
     super(data); 
    } 

    @Override 
    public Booking getRowData(String rowKey) { 
     List<Booking> bookings = (List<Booking>) getWrappedData(); 
     for(Booking booking : bookings) { 
      if(("booking_"+booking.getId().toString()).equals(rowKey)) { 
       return booking; 
      } 
     } 
     return null; 
    } 

    @Override 
    public Object getRowKey(Booking booking) { 
     return "booking_"+booking.getId().toString(); 
    } 

} 

B

j_idt9%3Aj_idt13%3A0%3Aj_idt15_selection:booking_300,booking_301,booking_302 
j_idt9%3Aj_idt13%3A1%3Aj_idt15_selection:booking_566,booking_567 
j_idt9%3Aj_idt13%3A2%3Aj_idt15_selection: 

はまた、私はBookingsDataModelgetRowData方法が正しいBookingオブジェクト(選択したもの)を返し、デバッグ中に発見された:私は私の選択でフォームを送信するときrowserは、サーバーに次のデータをポストします。

ただし、空の配列は、常にClientオブジェクトのsetBookingsToBillに渡されます。ここで何がうまくいかないのでしょうか?


更新:

は空の配列は、最初のClientオブジェクトを渡される - 予約が選択されたかどうかは問題ではありません。その他のすべてのClientオブジェクトのsetBookingsToBillメソッドは、パラメータ値がnullで呼び出されます。

+0

プライムフェイスのバージョンを提供してください – Jitesh

答えて

-3

selectionModeは、<p:dataTable>タグの一部である必要があります。

ここに例があるショーケースへのリンクがあります。あなたがチェックボックスで複数選択をしたい場合は http://www.primefaces.org/showcase/ui/datatableRowSelectionMultiple.jsf

+0

Felipeのコメントを参照してください - これはチェックボックスを削除し、コントロール/コマンドで複数選択できます – prule

0

はそうでもない、あなたがJFSが行ったようにしなければならない:ショーケースで

ちょうどそれを示す一つの例があります。ユーザーが選択するためのボックスを含む列が作成されます。 p:dataTableの属性を使用して、あなたが言ったようにすることもできますが、これはボックスを作成せず、複数の選択を行うには+クリックを制御する必要があります。

関連する問題