【发布时间】:2010-08-13 11:46:40
【问题描述】:
我在查看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?
感谢您的回复。
【问题讨论】:
标签: java jsf jpa jsf-2 java-ee-6