アイテムのビュー データに小さな問題があり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;
1 つの SUM 要素を使用します。その後、正しいデータがテーブルにあり、問題はありません。
私の質問は次のとおりです。クエリに 2 つ以上の 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>
しかし、プロパティ p1 と p2 が存在しないという同じ EJB 例外があります。
私はJava EEが初めてで、これを処理できません。多分私の問題を解決する別の方法がありますか?多分私は使用すべきではありませんh:dataTableItem
か?
返信ありがとうございます。