2011-03-28 32 views
1

我有以下命名查詢實體:問題渲染JPQL自定義查詢結果爲JSF頁面

@NamedQuery(name = "findAllGarbage", query = "SELECT g.filename, g.description, g.uploadDate FROM Garbage g;") 

的問題是,我想這個結果傳遞給一個DataTable渲染,我收到NumberFormatException的。我不明白爲什麼,因爲沒有任何數字。

這是程序的其餘部分的樣子:

-The EJB執行查詢

@Stateless(name = "ejbs/SearchEJB") 
public class SearchEJB implements ISearchEJB { 

@PersistenceContext 
private EntityManager em; 


public List<Garbage> findAllGarbage() { 
    Query query = em.createNamedQuery("findAllGarbage");  
    List<Garbage> tmpGarbage = query.getResultList(); 
    return tmpGarbage; 
} 

的JSF -The部分顯示的資料表:

<p:dataTable var="garbage" value="#{resultsController.allGarbage}" paginator="true" rows="10" 
      paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
      rowsPerPageTemplate="5,10,15">   

      <p:column> 
      <f:facet name="header"> 
      <h:outputText value="Filename" /> 
      </f:facet> 
      <h:outputText value="#{garbage.filename}" /> 
      </p:column> 

      <p:column> 
      <f:facet name="header"> 
      <h:outputText value="Description" /> 
      </f:facet> 
      <h:outputText value="#{garbage.description}" /> 
      </p:column> 

      <p:column> 
      <f:facet name="header"> 
      <h:outputText value="Upload date" /> 
      </f:facet> 
      <h:outputText value="#{garbage.uploadDate}" /> 
      </p:column>     
    </p:dataTable> 

- 與JSF頁面交互的託管bean:

@ManagedBean 
@RequestScoped 
public class ResultsController { 

@EJB 
private ISearchEJB searchEJB; 

private Garbage garbage; 

public List<Garbage> getAllGarbage() { 
    return searchEJB.findAllGarbage(); 
} 

public Garbage getGarbage() { 
    return garbage; 
} 

public void setGarbage(Garbage garbage) { 
    this.garbage = garbage; 
} 

誤差表示:

警告:StandardWrapperValve [面孔的Servlet]:PWC1406:Servlet.service()爲servlet的面孔的Servlet拋出異常 java.lang.NumberFormatException:對於輸入字符串: 「文件名」

我不明白文件名有什麼問題。

------------------------------------ UPDATE --------- ---------------------------

我改變了JSF到這個,現在我沒有看到錯誤。我看到塔表數據,但空白:

<p:dataTable var="garbage" value="#{resultsController.allGarbage}" paginator="true" rows="10" 
     paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
     rowsPerPageTemplate="5,10,15">   

     <p:column> 
     <f:facet name="header"> 
     <h:outputText value="Filename" /> 
     </f:facet> 
     <h:outputText value="#{garbage[4]}" /> 
     </p:column> 

     <p:column> 
     <f:facet name="header"> 
     <h:outputText value="Description" /> 
     </f:facet> 
     <h:outputText value="#{garbage[3]}" /> 
     </p:column> 

     <p:column> 
     <f:facet name="header"> 
     <h:outputText value="Upload date" /> 
     </f:facet> 
     <h:outputText value="#{garbage[6]}" /> 
     </p:column>     
</p:dataTable> 

回答

2

問題是由以下事實的查詢如

SELECT g.filename, g.description, g.uploadDate FROM Garbage 

返回與文件名,描述和uploadDate作爲其元素的Object[]引起的。

如果你想訪問它們當作對象屬性(如你在JSF這樣做),你需要查詢的全部對象,而不是:

SELECT g FROM Garbage g 
+0

這是不是一種選擇,因爲它也將retrive文件本身。這會降低性能。每個文件可以是幾兆字節。我需要以某種方式從查詢中排除一個稱爲文件的類型爲byte [] – sfrj 2011-03-28 14:39:52

+0

@sfrj的變量:然後,您需要在視圖中使用數組索引而不是字段名稱(我不確定它在JSF中的工作方式)。 – axtavt 2011-03-28 14:40:49

+0

我的想法是嘗試去做你所說的:SELECT g FROM Garbage g並嘗試添加諸如gCEfile之外的東西但是那沒有奏效。我不知道haw數組索引的工作原理。有沒有其他的選擇?我只需要沒有屬性文件的垃圾對象。 – sfrj 2011-03-28 14:46:26