使用 ui:repeat 访问本机查询列表
Posted
技术标签:
【中文标题】使用 ui:repeat 访问本机查询列表【英文标题】:accessing native query list using ui:repeat 【发布时间】:2013-05-03 04:42:04 【问题描述】:假设我有一个表 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"
【问题讨论】:
【参考方案1】:为什么我得到一个 SEVERE: javax.el.ELException: /test.xhtml: For input string: "id"
因为本机查询返回 List<Object[]>
,而不是 List<Test>
。您基本上是在尝试使用诸如"id"
之类的字符串而不是诸如0
之类的整数来访问Object[]
数组。如果您仔细观察堆栈跟踪,那么您应该已经注意到在异常之后堆栈中的ArrayELResolver
存在一点,这应该已经暗示#item
实际上被解释为一个数组。
因此,如果您绝对无法将其作为完整的 List<Test>
(you can easily do inner joins using @ManyToOne
and so on) 获取,那么应该这样做以从 SELECT
查询中获取第一列:
<li>#item[0]</li>
【讨论】:
【参考方案2】:SELECT 子句查询多个列或实体,结果 在 java.util.List 中的对象数组 (Object[]) 中聚合 由 getResultList() 返回。
首先,您的情况不需要本机查询。本机查询的结果返回一个对象数组列表。您必须创建 JPQL 查询而不是本机查询。
Query q = em.createQuery("select t from Test t", Test.class);
List<Test> list = q.getResultList();
【讨论】:
嗨,实际上我需要它是 nativeQuery,因为我需要类似"select t.*,nt.name from test as t Inner Join newTest as nt"
@galao 尝试描述你的实际问题,它误导人们,浪费双方时间。类似的,可以参考这里-***.com/a/4536802/366964以上是关于使用 ui:repeat 访问本机查询列表的主要内容,如果未能解决你的问题,请参考以下文章
在 <ui:repeat> 中指定元素的条件渲染? <c:if> 似乎不起作用