我有这张桌子:
<h:form>
<p:dataTable id="books" value="#{ordersBean.userOrders}" var="book" selection="#{ordersBean.selectedBook}">
<p:column>
<f:facet name="header">Order ID</f:facet>
<h:outputText value="#{book[0]}"/>
</p:column>
<p:column>
<f:facet name="header">Title</f:facet>
<h:outputText value="#{book[1]}"/>
</p:column>
<p:column>
<f:facet name="header"></f:facet>
<p:commandButton id="selectRowBtn" value="select" action="#{ordersBean.showSelectedBook}"/>
</p:column>
</p:dataTable>
</h:form>
我想当我单击每个
select
按钮时,它是分配给selectedBook
属性的行信息,并在showSelectedBook()
方法中显示它:这是
ordersBean
:private Book selectedBook = new Book();
public Book getSelectedBook() {
return selectedBook;
}
public void setSelectedBook(Book selectedBook) {
this.selectedBook = selectedBook;
}
public void showSelectedBook() {
System.out.println("In selected Book(), book: " + getSelectedBook());
}
但是结果是这样的:
In selected Book(), book: null
最佳答案
如果要显示所选的书,则必须设置selectionMode="single"
,而无需在每行中放置commandButton
,只需在页脚构面中仅指定一个commandButton
,如下所示:
<f:facet name="footer">
<p:commandButton id="selectRowBtn" value="select" action="#{ordersBean.showSelectedBook}"/>
</f:facet>
而这里的主要问题是,您正在为
new Book()
变量设置selectedBook
,因此为null
(声明)设置了selectedBook
值:private Book selectedBook = new Book();
应该 :
private Book selectedBook;
您不必在
new Book()
中实例化selectedBook
。查看此Showcase中的第二个示例,以了解其工作原理。
关于java - 在primefaces数据表中选择“行”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29965835/