使用ui:repeat访问本机查询列表

时间:2013-05-03 04:42:05

标签: jsf jpa nativequery

假设我有一个表test,其中列idname

在我的bean上我得到了这个查询

public List getTestList(){
  Query q = em.createNativeQuery("select * from test");
  List list = q.getResultList();
  return list;
}

在我的jsf页面上我有:

<ul>
    <ui:repeat id="resulta" value="#{testController.testList}" var="item"> 
        <li>#{item.id}</li>
    </ui:repeat>
</ul>

为什么我会得到SEVERE: javax.el.ELException: /test.xhtml: For input string: "id"

2 个答案:

答案 0 :(得分:0)

  

SELECT子句查询多个列或实体的结果   聚合在java.util.List中的对象数组(Object [])中   由getResultList()返回。

首先,在您的情况下不需要本机查询。本机查询的结果返回一个对象数组列表。您必须创建JPQL查询而不是本机查询。

Query q = em.createQuery("select t from Test t", Test.class);
List<Test> list = q.getResultList();

答案 1 :(得分:0)

  

为什么我会得到一个SEVERE:javax.el.E​​LException:/test.xhtml:对于输入字符串:“id”

因为原生查询会返回List<Object[]>,而不是List<Test>。您基本上尝试使用Object[]之类的字符串作为索引而不是"id"之类的整数来访问0数组。如果你仔细观察堆栈跟踪,那么在异常之后你应该已经注意到堆栈中ArrayELResolver的存在了一点,这应该已经暗示#{item}实际上被解释为一个数组

因此,如果您绝对无法将其作为一个值得信赖的List<Test>you can easily do inner joins using @ManyToOne and so on)获取,那么这应该从SELECT查询中获取第一列:

<li>#{item[0]}</li>