【问题标题】:DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled or you need to define rowKey attribute启用选择时,DataModel 必须实现 org.primefaces.model.SelectableDataModel 或者您需要定义 rowKey 属性
【发布时间】:2015-05-02 22:27:22
【问题描述】:

我在选择单行时遇到了这个异常:

 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

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

应该idString 而不是Integer

【问题讨论】:

  • 为什么在托管 bean 中使用@Transactional?它严格属于服务层(您在其中定义了BookDao)。
  • @Tiny 感谢您的记忆,它只是为了简化测试。

标签: jsf primefaces datatable


【解决方案1】:

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

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

【讨论】:

  • 并且错误地认为属于两个完全不同的独立框架的这些注释@ManagedBean@ViewScoped@Component可以一起工作。它们肯定会在以后产生副作用。
  • @Tiny:可能是,我看过其他帖子有相同的陈述。不过我从来没有用过spring,所以没有经验
  • 这些帖子来自写得不好的博客/文章/教程/书籍或任何其他类型的材料。我也是此类材料的受害者,过去很长一段时间一直在误导。
  • 对不起,我的意思是在 SO 上发帖,不要将这两个注释结合起来(虽然可能来自你 ;-))
猜你喜欢
  • 2016-01-03
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多