【发布时间】:2012-05-30 12:04:37
【问题描述】:
我有一个要在其中添加新行的数据表。这样做时,我收到以下错误 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;
}
【问题讨论】:
-
哪个 PF 版本?将
rowKey属性设置为指向var对象的唯一标识符应该可以解决它,但是您已经设置了它。 -
PrimeFaces 3.2。我知道,我必须添加它,因为起初行选择不起作用。但这现在工作正常。在页面的单独部分中显示每一行的详细信息。但是当添加一个新行时它会失败。奇怪。
-
好的,找到问题了。添加新项目时,其 ID 默认为 null,并将 id 用作 rowkey。所以我在添加一个新的时将 id 初始化为 -1 并且它可以工作。
标签: jsf datatable primefaces