【发布时间】:2015-07-10 01:02:46
【问题描述】:
我有这张桌子:
<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
【问题讨论】:
-
行不能这样选择。您需要使用
single或multiple两个值之一适当地设置selectionMode。看看showcase。 -
@Tiny 但我不需要在对话框中显示选定的行,我需要在 backing bean 中获取行。
-
展示示例上的对话框只是一个演示。对话框中显示的行来自在相应数据表中选择的相关托管行 -
<ui:repeat value="#{dtSelectionView.selectedCars}" var="car">在多行选择的情况下,#{dtSelectionView.selectedCar}在单行选择的情况下。如果根本不需要,可以简单地忽略该对话框。 -
链接的展示展示了多种方法来获取支持 bean 中的行。第三个示例 eventsDT 可能是最直接的示例。
-
点击按钮获取 actionListener 中的 bookId,迭代 bookList 并在成功匹配时提取 Book 对象,将其分配给 selectedBook。很简单!!!
标签: java jsf primefaces datatable