我有这张桌子:



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

10-10 17:01