簡體   English   中英

Primefaces:向數據表添加新行會導致錯誤:啟用選擇后,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

我有一個要在其中添加新行的數據表。 這樣做時,出現以下錯誤javax.servlet.ServletException:啟用選擇后,DataModel必須實現org.primefaces.model.SelectableDataModel。

我該如何解決我的問題?

這是在我的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用作行鍵。 因此,在添加新的ID時,我將ID初始化為-1,並且可以正常工作。

無需將id設置為-1,只需編寫如下函數:

public int getRowKey(Integer id) { return id!=null?id:-1; }

並從@rowKey中的el表達式中調用它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM