Problem z wyświetlaniem danych w <h:dataTable>

0

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.

0

Witam,

Po dogłębnych poszukiwaniach znalazłem rozwiązanie. Jeśli komuś się przyda to proszę bardzo:

Metoda w SessionBean:

public List<Object[]> 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");
        List<Object[]> lista = q.getResultList();
        return lista;
    }

Metoda w JSF ManagedBean:

public List<Object[]> getFCP() {   
        return priceListFacade.getFirstClassPrices();
    }

Element DataTable w JSF:

<h:dataTable value="#{priceList.FCP}" var="item" border="1" >
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="S1" />
                        </f:facet>
                        <h:outputText value="#{item[0]}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="S1" />
                        </f:facet>
                        <h:outputText value="#{item[1]}"/>
                    </h:column>
                </h:dataTable>

DZIAŁA !!! Pozdrawiam. [green]

1 użytkowników online, w tym zalogowanych: 0, gości: 1