PrimeFaces:DataTable多选不起作用

问题描述 投票:4回答:2

我似乎没有在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:

此外,我在调试期间发现getRowDataBookingsDataModel方法返回正确的Booking对象(选定的对象)。

但是,总是将空数组传递给我的setBookingsToBill对象的Client。这可能会出错?


更新:

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

jsf jsf-2 primefaces facelets mojarra
2个回答
0
投票

不是真的,如果你想要复选框多选,你必须像jfs那样做:

在展示中有一个例子显示了这一点。它将创建一个包含用户可以选择的框的列。您也可以使用p:dataTable的属性执行操作,但是这不会创建框,用户必须控制+单击才能执行多个选择。


-3
投票

selectionMode应该是<p:dataTable>标记的一部分。

这是一个展示链接,有一个例子。 http://www.primefaces.org/showcase/ui/datatableRowSelectionMultiple.jsf

© www.soinside.com 2019 - 2024. All rights reserved.