【问题标题】:DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled, but I have already defined rowKey启用选择时DataModel必须实现org.primefaces.model.SelectableDataModel,但我已经定义了rowKey
【发布时间】:2012-11-12 11:02:30
【问题描述】:

我有一个可选择的 PrimeFaces 3.4.1 数据表:

<p:dataTable value="#{projectAdminisrationMB.selectedUserMemberOfGroups}" var="group1" 
    rowKey="#{group1.name}" selectionMode="single" selection="#{projectAdminisrationMB.selectedBelongToGroup}">
    ...
</p:dataTable>

我收到此错误:

com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback 访问 Grave:javax.faces.FacesException:启用选择时,DataModel 必须实现 org.primefaces.model.SelectableDataModel。

但是我已经按照FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled 设置了rowKey。这是如何引起的,我该如何解决?

【问题讨论】:

    标签: jsf primefaces selectable row-key


    【解决方案1】:

    rowKey 属性中的EL 表达式曾经计算null 时,可能会发生这种情况。

    确保Group 实例的name 属性从不 null。否则最好使用表示自动生成的数据库主键的属性,例如 #{group1.id} — 如果你有的话。

    【讨论】:

    • 组名永远不会为 null ,但我尝试了 id 并且错误仍然存​​在。我的 managedBean 应该实现 SelectableDataModel 吗?
    • 不,不是您的托管 bean。数据模型,正如异常消息所说。 &lt;p:dataTable value&gt; 后面的属性。回到具体问题:好吧,对不起,例外不会说谎。如果您以这种方式使用rowKey,那么导致此异常的唯一原因是至少有一个项目具有null 组名。也许数据加载逻辑被破坏了?尝试总结一个具体的 SSCCE 示例来说明问题。
    【解决方案2】:

    仅供参考 - 我在使用 Primefaces 列过滤器时遇到了同样的错误。如果我使用过滤器并单击刷新按钮重新加载表,我会遇到错误。如果我不使用列过滤器,那么刷新表格时就不会发生错误。我有几个列过滤器,它们通过提取名字或姓氏对包含全名的同一字段执行过滤逻辑,所以我怀疑这个问题与这些过滤器有关。我还没有弄清楚这个问题,但我想和你分享一下,以防它有帮助。我正在使用 rowKey。

    【讨论】:

    • 这听起来像是对该问题的潜在有用评论,但可能不是一个明确的“答案”。
    猜你喜欢
    • 2016-01-03
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多