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 并学习一些故障排除方法
这是我在 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 并学习一些故障排除方法