Primefaces 数据表获取选定行作为 arrayList 类型

Primefaces datatable get selected row as type arrayList

这是我在 primefaces 数据中的 tabletable:

(我正在使用 hibernate 获取 table 行)

代码:

<f:event type="preRenderView" listener="#{myCardBean.userCard(userBean.currentUser.id)}"/>
...
<p:dataTable id="books" value="#{myCardBean.booksList}" var="book" selectionMode="single"
             selection="#{myCardBean.selectedOrder}" rowKey="#{book[0]}">

    <p:ajax event="rowSelect" listener="#{myCardBean.onRowSelect}"/>
    <p:ajax event="rowUnselect" listener="#{myCardBean.onRowUnselect}"/>

    <p:column>
        <f:facet name="header">Order ID</f:facet>
        <h:outputText value="#{book[0]}"/>
    </p:column>
    <p:column>
        <f:facet name="header">Book Title</f:facet>
        <h:outputText value="#{book[1]}"/>
    </p:column>
    <p:column>
        <f:facet name="header">Book Cost</f:facet>
        <h:outputText value="#{book[2]}"/>
    </p:column>
    <p:column>
        <f:facet name="header">Author</f:facet>
        <h:outputText value="#{book[3]}"/>
    </p:column>
    <p:column>
        <f:facet name="header">Order Date </f:facet>
        <h:outputText value="#{book[4]}"/>
    </p:column>
    <p:column>
        <f:facet name="header">QTY</f:facet>
        <h:outputText value="#{book[5]}"/>
    </p:column>
    <p:column>
        <f:facet name="header">Total Price</f:facet>
        <h:outputText value="#{book[6]}"/>
    </p:column>
</p:dataTable>

这里是MyCardBean class:

@Autowired
private BookDao bookDao;
private Object[] selectedOrder;
private List<Object[]> orderBookInfo;

public List<Book> userCard(String uID) {
    booksList =  bookDao.getOrderAndBookInfo(uID).list(); //returns array list of orderId, book title, book cost,...
    return booksList;
}


public List<Object> getOrderBookInfo() {
    return orderBookInfo;
}

public void setOrderBookInfo(List<Object[]> orderBookInfo) {
    this.orderBookInfo = orderBookInfo;
}

public Object[] getSelectedOrder() {
    return selectedOrder;
}

public void setSelectedOrder(Object[] selectedOrder) {
    this.selectedOrder = selectedOrder;
}

public void onRowSelect(SelectEvent event) {
    System.out.println("row selected, " + event.getObject());
}

public void onRowUnselect(UnselectEvent event) {
    System.out.println("row Unselected");
}

table 的每一行都是 java.util.ArrayList 类型。

我在第 selection 行没有异常,但它显示如下:

row selected, [Ljava.lang.Object;@c25754e

(我为 selectedOrder 尝试输入 Object 而不是 Object[],但得到了相同的结果)

为什么我连续 select 时显示不正确,比如:

3 , ontellijidea , 20000.0 , Mr aa , 2015-05-03 , 5 , 100000.0

更新

public SQLQuery getOrderAndBookInfo(String userId) {
    SQLQuery sqlQuery = getSession().createSQLQuery("SELECT " +
            " orders.id, book.title, book.cost, book.author, orders.orderDate, orderitem.quantity, orderitem.totalPrice " +
            "FROM book" +
            " INNER JOIN orderitem ON book.id = orderitem.book_id " +
            "  INNER JOIN orders ON orders.id = orderitem.orders_id " +
            "WHERE user_id = :userID ");
    sqlQuery.setString("userID", userId);
    return sqlQuery;
}

型号classes:

event.getObject() 是一个 Object[],而不是 [Ljava.lang.Object;@c25754e 中 [L] 的意思的数组列表,所以它应该是什么,你的 subject/title 是错的。

Java 确实,出于明显的原因,不知道如何打印它所以它会打印您看到的内容。您很可能没有尝试打印 event.getObject()[0].

再一次,这都是非常基本的 java 内容,如果您仔细(非常好)查看实际发生的情况,可以通过在 Internet 上进行一些简单的搜索来找到。如前所述,请先学习基础知识 java 并学习一些故障排除方法