p: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那样做:


-3
投票

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

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