h:dataTable
项目中的视图数据存在小问题。我有本机查询,它在数据库和java中正常工作:
SELECT SUM(price_list.first_class_price), SUM(price_list.second_class_price)
FROM price_list, connections
WHERE connections.id = price_list.id_connect
GROUP BY connections.source;
EJB中的方法返回元素列表。此方法如下所示:
public List<PriceList> getFirstClassPrices() {
Query q = em.createNativeQuery("SELECT SUM(price_list.first_class_price), SUM(price_list.second_class_price) FROM price_list, connections WHERE connections.id = price_list.id_connect GROUP BY connections.source");
return q.getResultList();
}
我想在dataTableItem中显示此查询的结果,但我不知道如何获取此值。我试图做这样的事情(FCP是JSF ManagedBean中返回提到的列表的方法):
<h:dataTable value="#{priceList.FCP}}" var="item" cellspacing="0" cellpadding="1" border="1">
<h:column>
<f:facet name="header">
<h: outputText value="First class"/>
</f:facet>
<h: outputText value="#{item}"/>
</h:column>
<h:column>
<f:facet name="header">
<h: outputText value="Second class"/>
</f:facet>
<h: outputText value="#{item}"/>
</h:column>
</h:dataTable>
但是这只显示了表格中的结果。
JSF ManagedBean中的FCP方法如下所示:
public List<PriceList> getFCP() {
return priceListFacade.getFirstClassPrices();
}
当我有这样的查询时,此解决方案正常工作:
SELECT SUM(price_list.first_class_price)
FROM price_list, connections
WHERE connections.id = price_list.id_connect
GROUP BY connections.source;
有一个SUM元素。然后表中的数据正确,没有问题。
我的问题是:当我在查询中有两个或更多SUM元素时,如何获取数据,没有结果列表中的引用?
我尝试使用这样的代码:
<h:dataTable value="#{priceList.FCP}}" var="item" cellspacing="0" cellpadding="1" border="1">
<h:column>
<f:facet name="header">
<h: outputText value="First class"/>
</f:facet>
<h: outputText value="#{item.first_class_price}"/>
</h:column>
<h:column>
<f:facet name="header">
<h: outputText value="Second class"/>
</f:facet>
<h: outputText value="#{item.second_class_price}"/>
</h:column>
</h:dataTable>
但是我有一个EJB异常:没有像first_class_price
和second_class_price
这样的属性。
我尝试更改此查询:
SELECT SUM(price_list.first_class_price) AS p1, SUM(price_list.second_class_price) AS p2
FROM price_list, connections
WHERE connections.id = price_list.id_connect
GROUP BY connections.source;
然后在JSF中我使用了这样的代码:
<h:dataTable value="#{priceList.FCP}}" var="item" cellspacing="0" cellpadding="1" border="1">
<h:column>
<f:facet name="header">
<h: outputText value="First class"/>
</f:facet>
<h: outputText value="#{item.p1}"/>
</h:column>
<h:column>
<f:facet name="header">
<h: outputText value="Second class"/>
</f:facet>
<h: outputText value="#{item.p2}"/>
</h:column>
</h:dataTable>
但我有相同的EJB异常,属性p1和p2不存在。
我是Java EE的新手,我无法解决这个问题。也许有另一种方法来解决我的问题?也许我不应该使用h:dataTableItem
?
感谢您的回复。
答案 0 :(得分:0)
我在另一个主题上找到了我的问题的解决方案。这是正确的解决方案:
SessionBean:
public List<Object[]> getFirstClassPrices() {
Query q = em.createNativeQuery("SELECT SUM(price_list.first_class_price), "
+ "SUM(price_list.second_class_price), SUM(price_list.third_class_price), "
+ "SUM(price_list.luggage_fee), SUM(price_list.airport_fee), SUM(price_list.fuel_fee), "
+ "SUM(price_list.crew_salary), connections.source FROM price_list, connections WHERE connections.id = price_list.id_connect GROUP BY connections.source");
List<Object[]> lista = q.getResultList();
return lista;
}
JSF ManagedBean:
public List<Object[]> getFCP() {
return priceListFacade.getFirstClassPrices();
}
最后是JSF页面的片段:
<h:outputText value="#{item[0]}"/>
答案 1 :(得分:0)
在我的应用程序中尝试使用“GROUP BY”查询时,我遇到了困难。我使用的解决方案如下:
1, tableNamefacade.java:
public List<Object[]> getAllGroupByCoulumn() {
Query q = em.createNativeQuery("SELECT d.column FROM tableName d GROUP BY d.coulmn");
List<Object[]> list = q.getResultList();
return list;
}
2, tableNameController.java: bean的属性:
private List<Object[]> items;
和function,它准备了在xhtml页面显示的列表:
items = getFacade().getAllGroupByCoulumnm();
3,最后是xhtml页面中的 dataTable :
<h:dataTable value="#{myController.items}" var="item">
...
<h:outputText value="#{item}">
...