gpt4 book ai didi

jsf - 在 JSF 数据表中显示 Hibernate/JPA 结果会导致 : java. lang.NumberFormatException:对于输入字符串: "[propertyname]"

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:54 24 4
gpt4 key购买 nike

我最初通过以下查询来获取 List<Employee> :

Query query = session.createQuery("select table1 from Table as table1");
this.employees = (List<Employee>) query.list();

这已在下面的数据表中成功呈现:

<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 个表中检索它时:

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)
...

这是怎么造成的,如何解决?

最佳答案

您的 Hibernate 查询实际上返回 List<Object[]> ,不是List<Employee>正如您在未经检查的 Actor 阵容中错误地假设的那样。

证据位于堆栈跟踪中:

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 涉及 name 的基数(因此, #{employee} )表示类似 Object[] 的数组不是像Bean这样的javabean 。 EL 正在尝试使用 name通过索引获取数组项,该索引只能是整数,如 #{employee[0]}对于第一项。但是,字符串值 "name"无法解析为整数,因此出现此异常。

您有两种选择来解决此问题:

  • 更改 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 查询以返回真实 List<Employee> .

另请参阅:

关于jsf - 在 JSF 数据表中显示 Hibernate/JPA 结果会导致 : java. lang.NumberFormatException:对于输入字符串: "[propertyname]",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34955621/

24 4 0
文章推荐: javascript - 显示隐藏
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com