【问题标题】:populate primefaces datatable from a nativeQuery从 nativeQuery 填充 primefaces 数据表
【发布时间】:2012-01-12 20:15:34
【问题描述】:

我正在学习 jsf 环境,对不起,如果这对你来说是一种简单的情况,

我正在尝试从本机查询填充 primefaces 数据表,这就是我目前得到的

       //My native query is defined in my entity
       @NamedNativeQueries({@NamedNativeQuery(name="Tallt089.bandejaCitas",
       query ="select bandeja.ep_id_tallt089 idBandeja ...)})
       ...
       ...

我这样称呼这个 nativeQuery

        public List**<TablaBandejaCitas>** bandejaCitas(String cia, String agencia, String division) {
        Query query = em.createNamedQuery("Tallt089.bandejaCitas");
        query.setParameter(1,cia);
        query.setParameter(2,agencia);
        query.setParameter(3,division);
        return query.getResultList();
     //this works fine retrieves correctly my query
}

并在我的 managedBean 上使用它

        public List**<TablaBandejaCitas>** bandejaCitas(String compania,
        String agencia,String division){
         return agendamientoSession.bandejaCitas(compania,agencia,division);  
        }

然后像这样在我的 jsf 页面上引用了这个

     <p:dataTable id="bandeja_citas" 
     value="#{AgendamientoMBean.bandejaCitas(UsuarioMBean.compania,UsuarioMBean.agencia,
     UsuarioMBean.divisionPK.diDivision)}"  
                             var="bandeja" 
                             paginator="true" rows="15"  >
                    <f:facet name="header">
                        Bandeja Citas por confirmar/Llamadas por realizar
                    </f:facet>
                    <p:column headerText="Id Bandeja" >
                        <h:outputText value ="#{bandeja.idBandeja}"/>
                    </p:column>

                    <p:column headerText="Cliente" sortBy="#{bandeja.cliente}" 
                        filterBy="#{bandeja.cliente}">
                       <h:outputText value ="#{bandeja.cliente}"/>
                    </p:column>
                ...
                ...
                ...
                 </p:dataTable>

我意识到 var 属性需要映射查询字段之类的东西,因为 jsf 页面上的警告告诉我这是一个未知属性

     <h:outputText value ="#{bandeja.**cliente**}"/>

我不知道如何将查询存储在该变量中,以便显示数据

现在我得到了一个输入字符串异常,例如它读取原始数据而不是格式化列表的组件,其中正确的变量填充了查询字段..

希望你能理解我

提前了解你的 cmets :D

【问题讨论】:

  • 您的 bandejaCitas 方法是否仅返回 Object 对象的默认列表?您可能需要进行一些转换以确保它知道您有 Bandeja 实体对象。 return (List) query.getResultList();
  • 嗨@Rich 感谢您的回答。是的,它只是返回一个列表 Objects 对象,你能告诉我一个关于如何实现这个 演员的例子吗?所以我可以在 jsf 页面中正确调用它,我更新了我的代码添加了一个演员,但仍然没有工作
  • 当然,与我看到的使用仅返回对象的 getResultList() 的代码相比,这是我刚刚注意到的,所以至少有一个步骤是让 Java 知道这些对象实际上是你拥有的一个类带有查询的每个投影的属性。如果本机查询没有返回映射到 Entity/Bandeja 类中属性的表列的投影,那么我认为这是一个问题。退后一步,如果您能解释为什么使用 NativeQuery 以及您试图从 DB 中提取的内容(行还是多表查询?),回答您的问题可能会有所帮助。
  • Ty @Rich 真的很感谢您的帮助。是的,它是一个多表查询,并且该查询不代表数据库的表:S
  • 很高兴为您提供帮助。所以我的下一个问题是您使用的持久性框架是什么? javax.persistence.Query 是一个接口,所以你知道你的 Query 对象是什么特定的类吗?您从 EntityManager em 中获得的那个。我想知道是否有一种方法可用于遍历结果集,并且您可以将每个结果的列提供给每个列都有一个属性的自定义对象。那么 Primefaces 数据表在访问已知对象类型列表的属性时不会出现问题。

标签: datatable primefaces native populate


【解决方案1】:

好的,我解决了这个小问题。我通过使用我在 nativeQuery 中选择的列创建一个实体类(甚至不是数据库中的表)然后使用这个类作为原生中的 resultClass 选项来做到这一点:

resultClass=com.talleresZeusWeb.entidades.BandejaCitas.class

我试图制作那个 sqlresultsetmapping 注释,但不知道在这种情况下使用它。

希望有人在某个时候发现这很有用,感谢您的回复@Rich

【讨论】:

    猜你喜欢
    • 2013-04-13
    • 2014-01-25
    • 2019-06-30
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2017-02-03
    相关资源
    最近更新 更多