jsf - 启用选择时的 javax.faces.FacesException : DataModel must implement org. primefaces.model.SelectableDataModel

标签 jsf primefaces java-ee-6

对于此问题,我有另一个案例,即我有一个扩展基础实体的模型,并且该基础实体具有属性 ID。我将该 id 用作 rowKey 并抛出此错误。当我将 rowKey 的值设置为模型(不是抽象基础)中的任何属性时,数据表会起作用。

请注意,我正在研究 JavaEE6。

模型:

@Entity
@SequenceGenerator(name = "ID_GENERATOR", sequenceName = "USER_ADDRESS_SEQ")
public class UserAddress extends BaseEntity { //.. }

@MappedSuperclass
public abstract class BaseEntity implements Serializable, IEntity {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(generator = "ID_GENERATOR")
    @Column(name = "ID")
    private Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    } ..

JavaEE6 bean:

@Stateless
@Named
public class UserAddressBean implements Serializable {
    private static final long serialVersionUID = -6104153017102665096L; 

    private List<UserAddress> addresses;
    private UserAddress address;

    public List<UserAddress> getAddresses() {
        addresses = new ArrayList<UserAddress>();
        UserAddress temp = new UserAddress();
        temp.setDescription("test");
        addresses.add(temp);

        temp = new UserAddress();
        temp.setDescription("test");
        addresses.add(temp);

        return addresses;
    }

    public UserAddress getAddress() {
        return address;
    }

    public void setAddress(UserAddress address) {
        this.address = address;
    }..

和 xhtml 页面:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    template="/shared/page/_oneColumn.xhtml">
    <ui:define name="content">
        <h:form id="form">
            <p:panel>
                <f:facet name="header"></f:facet>
                <p:dataTable id="addresses" var="address"
                    value="#{userAddressBean.addresses}" rowKey="#{address.id}"
                    selection="#{userAddressBean.address}" selectionMode="single">
                    <p:column headerText="#{msg['field.description']}">
                        <h:outputText value="#{address.description}" />
                    </p:column>
                </p:dataTable>
                <f:facet name="footer"></f:facet>
            </p:panel>
        </h:form>
    </ui:define>
</ui:composition>

对这个问题有什么想法吗?

谢谢,
切屋

最佳答案

哦,对不起,我太笨了,问题是 id 是空的。我忘记了我对这些值进行了硬编码。因此,无论如何,对于将来会遇到相同问题的人来说,要使用较少的代码行键,请确保您设置了以下数据表属性: 1.) 行键 2.) 选择 3.) 选择模式

还要确保 rowKey 属性不为空。

关于jsf - 启用选择时的 javax.faces.FacesException : DataModel must implement org. primefaces.model.SelectableDataModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13041889/

相关文章:

JSF Primefaces SelectOneMenu

jsf - 取消对 rich :tabPanel switch 的验证

jsf - 使用 <p :commandLink> just for JS execution without form submit

JSF 动态地将 src 包含在 "ui:include src="#{bean.pagePath} 中”

java - 带内部 ui 的 Primefaces 数据表 :repeat

java - 集群上 weblogic 的 EJB 计时器的替代方案

java - 修复 p :dataTable width in PrimeFaces

error-handling - 如何处理 Primefaces 延迟加载中的错误?

jakarta-ee - 如何使用 Weld 注入(inject)不可序列化的类(如 java.util.ResourceBundle)

JSF Composite 组件的性能