Witam wszystkich,
Mam problem z wyświetleniem w <h:dataTable> wyników zapytania:
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;
Oto metoda w SessionBean:
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();
}
Zapytanie działa poprawnie w bazie danych oraz w Javie (nie pojawia się żaden błąd). Problem jest z wyświetleniem tych danych na stronie JSF. Oto kod z JSF Managed Beana zwracający rezultat tego zapytania:
public List<PriceList> getFCP() {
return priceListFacade.getFirstClassPrices();
}
Na stronie JSF próbowałem następującego rozwiązania:
<h:messages>
<h:outputText value="#{msg.frContentTitle}"/>
<h:dataTable value="#{priceList.FCP}}" var="item" cellspacing="0" cellpadding="1" border="1">
<h:column>
<f:facet name="header">
<h:outputText value="pierwsza klasa"/>
</f:facet>
<h:outputText value="#{item}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="druga klasa"/>
</f:facet>
<h:outputText value="#{item}"/>
</h:column>
</h:dataTable>
</h:messages>
Niestety wyświetlane są jedynie referencje do jakichś obiektów a nie dane z listy. Gdy napiszę zamiast item, item.first_class_price wyświetla się błąd EJB, ponieważ zmienna item nie posiada właściwości first_class_price.
Próbowałem także zmienic nieco zapytanie na:
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;
i wtedy na stronie JSF:
<h:messages>
<h:outputText value="#{msg.frContentTitle}"/>
<h:dataTable value="#{priceList.FCP}}" var="item" cellspacing="0" cellpadding="1" border="1">
<h:column>
<f:facet name="header">
<h:outputText value="pierwsza klasa"/>
</f:facet>
<h:outputText value="#{item.p1}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="druga klasa"/>
</f:facet>
<h:outputText value="#{item.p2}"/>
</h:column>
</h:dataTable>
</h:messages>
To rozwiązanie powoduje jednak błąd EJB: zmienna item nie posiada własności p1 i p2.
Gdy zapytanie wygląda następująco:
SELECT SUM(price_list.first_class_price) FROM price_list, connections WHERE connections.id = price_list.id_connect GROUP BY connections.source;
rozwiązanie pierwsze które podałem (strona JSF) działa prawidłowo - dane są wyświetlane. Problem pojawia się gdy chcę sumować większą ilość kolumn i wyświetlać je. nie wiem po prostu jak dostać się do wyników zapytania.
Pytanie brzmi zatem: w jaki sposób wyświetlić rezultat zapytania:
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;
na stronie JSF?
Może istnieje jakiś inny sposób niż wyświetlenie rezultatów tego zapytania w <h:dataTable>?
Pozdrawiam i z góry dziękuję za pomoc.