显示Hibernate / JPA导致JSF datatable的原因:java.lang.NumberFormatException:对于输入字符串:“[propertyname]” [英] Showing Hibernate/JPA results in JSF datatable causes: java.lang.NumberFormatException: For input string: "[propertyname]"
问题描述
最初我以下查询获取列表< Employee>
:
Query query = session.createQuery("select table1 from Table as table1");
this.employees = (List<Employee>) query.list();
这在下面的datatable中成功呈现:
This is successfully rendered in below datatable:
<p:dataTable var="employee" value="#{bean.employees}">
<p:column id="name" headerText="Name">
<h:outputText value="#{employee.name}" />
</p:column>
<p:column id="id" headerText="ID" >
<h:outputText value="#{employee.id}" />
</p:column>
</p:dataTable>
但是,当我尝试从2个表中检索它,如下所示:
However, when I try to retrieve it from 2 tables as below:
Query query = session.createQuery("select a.name, b.id from Table1 as a, Table2 as b");
this.employees = (List<Employee>) query.list();
它引发以下异常:
java.lang.NumberFormatException: For input string: "name"
at java.lang.NumberFormatException.forInputString(Unknown source)
at java.lang.Integer.parseInt(Unknown source)
at java.lang.Integer.parseInt(Unknown source)
at javax.el.ArrayELResolver.toInteger(ArrayELResolver.java:166)
at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:46)
...
这是如何造成的,如何我可以解决它吗?
How is this caused and how can I solve it?
推荐答案
您的Hibernate查询是实际返回一个列出< Object []>
,而不是列表< Employee>
,因为您在未选中的演员中错误地假设。
Your Hibernate query is actually returning a List<Object[]>
, not a List<Employee>
as you incorrectly assumed during the unchecked cast.
证据在堆栈跟踪中:
java.lang.NumberFormatException: For input string: "name"
at java.lang.NumberFormatException.forInputString(Unknown source)
at java.lang.Integer.parseInt(Unknown source)
at java.lang.Integer.parseInt(Unknown source)
at javax.el.ArrayELResolver.toInteger(ArrayELResolver.java:166)
at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:46)
...
ArrayELResolver
仅 涉及名称
(因此,#{employee}
)表示像 Object []
不像javabean一样的数组 Bean
。 EL尝试使用名称
通过索引获取数组项,这只能是像这样的整数#{employee [0]}
为第一项。但是,字符串值name
不能解析为整数,因此此异常。
The ArrayELResolver
is only involved when the base of name
(thus, the #{employee}
) represents an array like Object[]
not a javabean like Bean
. EL is attempting to use the name
to obtain the array item by index, which can only be an integer like so #{employee[0]}
for the 1st item. However, the string value "name"
is not parseable as an integer and hence this exception.
您有2解决此问题的选项:
You have 2 options to solve this problem:
-
更改JSF代码以期望
List< Object []> ;
。使用例如#{employee [0]}
,#{employee [1]}
等。
<p:dataTable var="employee" value="#{bean.employees}">
<p:column id="name" headerText="Name">
<h:outputText value="#{employee[0]}" />
</p:column>
<p:column id="id" headerText="ID" >
<h:outputText value="#{employee[1]}" />
</p:column>
</p:dataTable>
修复Hibernate查询以返回一个真实 列表< Employee>
。
这篇关于显示Hibernate / JPA导致JSF datatable的原因:java.lang.NumberFormatException:对于输入字符串:“[propertyname]”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!