引用:向datatable添加新行给出错误:当选择被启用时,DataModel必须实现org.primefaces.model.SelectableDataModel [英] Primefaces: Add a new row to datatable gives error: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled

查看:470
本文介绍了引用:向datatable添加新行给出错误:当选择被启用时,DataModel必须实现org.primefaces.model.SelectableDataModel的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个可以添加新行的数据表。当这样做时,我会收到以下错误
javax.servlet.ServletException:DataModel必须在选择启用时实现org.primefaces.model.SelectableDataModel。

I have a datatable where I want to add a new row. When doing so I get the following error javax.servlet.ServletException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.

如何我解决了我的问题?

How can I solve my problem?

这是在我的xhtml

This is in my xhtml

<h:commandLink  action="#{workOrderDetail.addOrderItem}" >
        <img src="${path.staticRootUrl}images/add.png" border="0" alt="${msg.workorderdetail_neworderitem}" title="${msg.workorderdetail_neworderitem}"/>
     </h:commandLink>
<p:dataTable styleClass="ptable100" id="orderItems" var="orderItem" value="#{workOrderDetail.orderItems}" width="100%" height="200" widgetVar="results"
     emptyMessage="#{msg.all_lists_no_records_found}" selection="#{workOrderDetail.selectedOrderItem}" selectionMode="single" onRowSelectUpdate=":detail:sub"
     rowKey="#{orderItem.id}"
<p:ajax event="rowSelect"  update=":detail:sub" />

这是我的bean代码

List<IMWSOrderItem> orderList = null;
public void addOrderItem() throws MWSException {
  IMWSOrderItem newOrderItem = getWorkOrder().getMWSOrder().getMWSOrderItem_Set().getNewMWSOrderItem();      
  getWorkOrder().getMWSOrder().getMWSOrderItem_Set().addMWSOrderItem(newOrderItem);
  orderList = null;   
}
public List<IMWSOrderItem> getOrderItems() throws MWSException {
  if (orderList == null) {
     orderList = new ArrayList(Arrays.asList(getWorkOrder().getMWSOrder().getMWSOrderItem_Set().getMWSOrderItems()));
  }
  return orderList;
}
public IMWSOrderItem getSelectedOrderItem() {
  return selectedOrderItem;
}
public void setSelectedOrderItem(IMWSOrderItem newSelectedOrderItem) {
  this.selectedOrderItem = newSelectedOrderItem;
}


推荐答案

确定,找到问题。添加新项目时,其ID默认为null,该ID用作rowkey。所以我在添加一个新的id时将其初始化为-1。它的工作原理。

Ok, found the problem. When adding a new item, its ID is default to null and the id is used as rowkey. So I initialized the id to -1 when adding a new one and it works.

这篇关于引用:向datatable添加新行给出错误:当选择被启用时,DataModel必须实现org.primefaces.model.SelectableDataModel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆