假设我有一个表test
,其中列id
和name
在我的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"
答案 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.ELException:/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>