4

PrimeFaces dataTables で複数選択が機能していないようです。

クライアントのリスト (dataList) を実装し、ネストされた dataTables にそれぞれの予約を表示して、請求のために複数の予約を選択できるようにしようとしています。

<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 クラス:

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();  
    }

}

選択したフォームを送信すると、ブラウザーは次のデータをサーバーに送信します。

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:

また、デバッグ中に のgetRowDataメソッドがBookingsDataModel正しいBookingオブジェクト (選択されたオブジェクト) を返すことがわかりました。

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


アップデート:

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

4

2 に答える 2

-1

そうではありませんが、チェックボックスで複数選択したい場合は、jfs のようにする必要があります。

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

于 2013-02-27T19:11:11.543 に答える
-3

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

例のあるショーケースへのリンクは次のとおりです。 http://www.primefaces.org/showcase/ui/datatableRowSelectionMultiple.jsf

于 2012-09-12T15:47:32.817 に答える