DataModel 必须在启用选择时实现 org.primefaces.model.SelectableDataMode



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

 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;
//...

我在数据表中定义了rowKeySelectionselectionMode

我不知道为什么我应该得到这个错误?!

id应该String而不是Integer吗?

您的行键(再次)定义错误。它应该是#{book.id},正如在PrimeFaces展示中所看到的那样。不确定这是唯一的错误,但是当我遇到这个错误时,我停止了进一步阅读。

请自己调查更多。StackOverflow不是一个免费的培训或咨询网站

相关内容

最新更新