【问题标题】:p:dataTable multiple selection not workingp:dataTable多项选择不起作用
【发布时间】:2012-05-15 20:40:07
【问题描述】:

我似乎无法在 PrimeFaces 数据表中进行多项选择。

我正在尝试实现客户列表 (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:

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

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


更新:

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

【问题讨论】:

  • 请提供primefaces版本

标签: jsf jsf-2 primefaces facelets mojarra


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    selectionMode 应该是&lt;p:dataTable&gt; 标签的一部分。

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

    【讨论】:

    • 查看 Felipe 的评论 - 这将删除复选框 - 并允许通过控制/命令单击进行多项选择
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 2013-08-08
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多