4

我似乎没有在 PrimeFaces dataTables 中进行多项选择。

我正在尝试实现客户列表(dataList)并在嵌套数据表中显示他们各自的预订,并可以选择多个预订进行计费:

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

另外,我在调试过程中发现返回正确的对象(选定的对象)的方法getRowDataBookingsDataModelBooking

但是,总是将空数组传递给setBookingsToBill我的Client对象。这里可能出了什么问题?


更新:

空数组仅传递第一个Client对象 - 是否选择了预订无关紧要。所有其他Client对象的setBookingsToBill方法都使用参数值调用null

4

2 回答 2

-1

不是真的,如果你想用复选框进行多项选择,你必须像 jfs 那样做:

在陈列柜中,有一个例子表明了这一点。它将创建一个包含供用户选择的框的列。您也可以按照您所说的使用 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 回答