簡體   English   中英

<h:dataTable> JSF頁面上的當前數據存在問題

[英]<h:dataTable> problem with present datas on JSF page

我在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_pricesecond_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嗎?

多謝您的回覆。

我已經找到另一個主題的解決方案。 這是正確的解決方案:

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]}"/>

嘗試在應用程序中使用“ 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: bean的屬性:

private List<Object[]> items;

和函數,准備在xhtml頁面上顯示的列表:

 items = getFacade().getAllGroupByCoulumnm(); 

3,在xhtml頁面中最終確定dataTable

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM