kar*_*ark 3 datatable jsf jpa primefaces
我最初的以下查询获得List<Employee>:
Query query = session.createQuery("select table1 from Table as table1");
this.employees = (List<Employee>) query.list();
Run Code Online (Sandbox Code Playgroud)
这在以下数据表中成功呈现:
<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>
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试从2个表中检索它时,如下所示:
Query query = session.createQuery("select a.name, b.id from Table1 as a, Table2 as b");
this.employees = (List<Employee>) query.list();
Run Code Online (Sandbox Code Playgroud)
它抛出以下异常:
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)
...
Run Code Online (Sandbox Code Playgroud)
这是怎么造成的,我该如何解决?
您的Hibernate查询实际上是返回a List<Object[]>,而不是List<Employee>在未经检查的强制转换期间错误地假设的.
证据在堆栈跟踪中:
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)
...
Run Code Online (Sandbox Code Playgroud)
的ArrayELResolver是仅当的碱参与name(因而,#{employee})表示像阵列Object[]不象一个JavaBean Bean.EL正在尝试使用name索引来获取数组项,索引只能是#{employee[0]}第1项的整数.但是,字符串值"name"不能作为整数进行解析,因此也是此异常.
您有2个选项可以解决此问题:
改变JSF代码以期望a 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>
Run Code Online (Sandbox Code Playgroud)修复Hibernate查询以返回真实 List<Employee>.
| 归档时间: |
|
| 查看次数: |
2396 次 |
| 最近记录: |