簡體   English   中英

啟用選擇時,DataModel 必須實現 org.primefaces.model.SelectableDataModel

[英]DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled

我試圖在啟用 RowSelection 的情況下實現一個 DataTable Editable。

但它拋出了一個異常:

啟用選擇時,DataModel 必須實現 org.primefaces.model.SelectableDataModel。

我在對象類和托管 bean 類中都實現了 DataModel,但錯誤是相同的。 現在只有一張空白表格出現在我面前。 請幫忙。

這個問題有兩種解決方案:

  1. 將 rowKey、selection 和 selectionMode 屬性添加到 dataTable
  2. 實現 SelectableDataModel 接口並擴展像 ListDataModel 這樣的 DataModel 來填充數據表

第一個更簡單。 rowKey="#{myEntity.carID}"到您的p:dataTable應該可以解決您的問題

如果您嘗試將新項目添加到基礎列表並忘記為新項目的 rowKey 賦值(rowKey 為 null),則會出現此錯誤。

除了 rags 給出的解決方案,我想提一下,如果行鍵是“NULL”或者如果你的整個 List 是“NULL”,你可能會得到同樣的錯誤,即使你已經完成了上面提到的所有步驟。 如果要顯示 0 行,請返回一個包含 0 個項目的列表。 不要為列表返回null

該錯誤消息表明您的 DataModel 未實現SelectableDataModel接口。 它需要是一個單獨的類。 這是 PF 中的一個示例,展示了需要如何完成數據表定義:

import org.primefaces.model.SelectableDataModel;  

public class CarDataModel extends ListDataModel<Car> implements SelectableDataModel<Car> {    
   ...
}

不要忘記在 EL 語法中將 rowKey 值括起來。

rowKey="row.id" 

會失敗但是

rowKey="#{row.id}" 

將會成功。

可能錯誤是因為在我的情況下 row.id 為空或 null 解決方案是改變這個:

rowKey="row.id" 

對此:

rowKey="row" 

和數據表的對象,例如

List<Row> collectionOfDataTable = new ArrayList<>();

Row (Object) 實現了可序列化:

public class Row implements Serializable{...}

暫無
暫無

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

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