2

新しい行を追加したいデータテーブルがあります。そうすると、次のエラー 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" />

これが私のビーンコードです

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;
}
4

2 に答える 2

1

id を -1 に設定する必要はありません。次のような関数を記述するだけです。

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

@rowKey の el 式から呼び出します

于 2018-07-22T14:07:48.367 に答える