<h: dataTable> проблема с существующими данными на странице JSF - PullRequest
0 голосов
/ 13 августа 2010

У меня небольшая проблема с данными вида в элементе 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> 

, но это показывает мне только ссылки в качестве результата в таблице.

Метод FCP в JSF ManagedBean выглядит следующим образом:

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?

Спасибо за ваши ответы.

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

Я застрял при попытке использовать запрос "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: свойство боба:

private List<Object[]> items;

и функция, которая подготавливает список, отображаемый на странице xhtml:

items = getFacade().getAllGroupByCoulumnm();

3, наконец, таблица данных на странице xhtml:

<h:dataTable value="#{myController.items}" var="item">
  ...
     <h:outputText value="#{item}">
  ...

0 голосов
/ 13 августа 2010

Я нашел решение своей проблемы в другой теме.Вот правильное решение:

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]}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...