将JPQL定制查询结果呈现到JSF页面中 [英] Issue rendering JPQL custom query results into a JSF page

查看:104
本文介绍了将JPQL定制查询结果呈现到JSF页面中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个具有以下命名查询的实体:

I have an entity with the following named query:

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

问题是我想将该结果传递给dataTable进行呈现,并且我收到NumberFormatException.我不明白为什么,因为那里没有数字.

The problem is that i want to pass that result to a dataTable to render, and i recieve NumberFormatException. I dont understand why because there are no numbers anywhere.

程序其余部分的外观如下:

This is how the rest of the program looks like:

-执行查询的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 part of the JSF that displays the tableData:

<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:

-The managed bean that interacts with the JSF page:

@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 [Faces Servlet]:PWC1406:Servlet Faces Servlet的Servlet.service()引发异常 java.lang.NumberFormatException:对于输入字符串:文件名"

WARNING: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception java.lang.NumberFormatException: For input string: "filename"

我不明白文件名出了什么问题.

I dont understand what is wrong with the file name.

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

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

我将JSF更改为此,现在我看不到错误.我看到表格数据,但为空:

I changed the JSF to this, and now i dont see the error. I see tha table data but empty:

<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> 

推荐答案

问题是由于诸如

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

以文件名,描述和uploadDate作为其元素返回Object[].

returns an Object[] with filename, description and uploadDate as its elements.

如果要作为对象属性访问它们(如在JSF中一样),则需要查询完整的对象:

If you want to access them as object properties (as you do in JSF), you need to query for the full object instead:

SELECT g FROM Garbage g

这篇关于将JPQL定制查询结果呈现到JSF页面中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆