繁体   English   中英

启用选择功能或您需要定义rowKey属性时,DataModel必须实现org.primefaces.model.SelectableDataModel

[英]DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled or you need to define rowKey attribute

我在选择单行时遇到了例外:

 javax.faces.FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled or you need to define rowKey attribute

表格如下:

<h:form>
    <p:dataTable id="books" value="#{myCardBean.booksList}" var="book" selectionMode="single"
                 selection="#{myCardBean.selectedBook}" rowKey="book.id">

        <p:ajax event="rowSelect" listener="#{myCardBean.onRowSelect}"/>
        <p:ajax event="rowUnselect" listener="#{myCardBean.onRowUnselect}"/>

        <p:column>
            <f:facet name="header">Book ID</f:facet>
            <h:outputText value="#{book.id}"/>
        </p:column>
        <p:column>
            <f:facet name="header">Title</f:facet>
            <h:outputText value="#{book.title}"/>
        </p:column>
    </p:dataTable>
</h:form>

这是myCardBean

@ManagedBean
@ViewScoped
@Component
public class MyCardBean implements Serializable {

@Autowired
private BookDao bookDao;
private List<Book> booksList;
private Book selectedBook;

@PostConstruct
public void init() {
    userCard();
}

@Transactional
public List<Book> userCard() {
    booksList = bookDao.findAllBooks();
    System.out.println("all Books size: " + booksList.size() + " books list type: " + booksList); // 3 , list of Object

    return booksList;
}

public void onRowSelect(SelectEvent event) {
    System.out.println("row selected, " + event.getObject());
}

public void onRowUnselect(UnselectEvent event) {
}
//getter/setter for selectedBook and bookList

这是Book模型类:

public class Book implements Serializable {

@Id
@GeneratedValue
private Integer id;
@Column(nullable = false)
private String title;
//...

我在数据表中定义了rowKey以及SelectionselectionMode

我不知道为什么我会出现这个错误?

id应该是String而不是Integer吗?

您的行键(再次)定义错误。 在PrimeFaces展示柜中可以看到它应该是#{book.id} 不确定这是唯一的错误,但是遇到此错误时,我不再继续阅读。

请自己调查。 StackOverflow不是免费的培训或咨询站点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM