在JSF datatable中显示Hibernate/JPA结果的原因:java.lang.NumberFormatException:对于输入字符串:";[propertyname]”;

在JSF datatable中显示Hibernate/JPA结果的原因:java.lang.NumberFormatException:对于输入字符串:";[propertyname]”;,jsf,jpa,primefaces,datatable,Jsf,Jpa,Primefaces,Datatable,我最初通过以下查询获得列表: 这是如何导致的,我如何解决它?您的Hibernate查询实际上返回的是一个列表,而不是您在未选中的强制转换过程中错误假设的列表 证据在堆栈跟踪中: java.lang.NumberFormatException: For input string: "name" at java.lang.NumberFormatException.forInputString(Unknown source) at java.lang.Integer.parseInt

我最初通过以下查询获得
列表

这是如何导致的,我如何解决它?

您的Hibernate查询实际上返回的是一个
列表,而不是您在未选中的强制转换过程中错误假设的
列表

证据在堆栈跟踪中:

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}
)表示类似于
对象[]
的数组,而不是类似于javabean的
Bean
时才涉及
ArrayELResolver。EL正在尝试使用
名称
通过索引获取数组项,对于第一个项,该项只能是类似so
{employee[0]}
的整数。但是,字符串值
“name”
不能解析为整数,因此出现此异常

您有两个选项来解决此问题:

  • 修改JSF代码,使其包含一个
    列表
    。使用例如
    {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查询以返回真实的
    列表

另见:
要返回“真实的
列表
”而不是@BalusC所说的
列表
,必须指定结果实例的类

getEntityManager().createNativeQuery(
                "SELECT * FROM ...",
                 EntityUser.class
).getResultList();

这里是:
EntityUser.class

感谢您的回复,我知道我在从数据库检索记录时提到了该列名,这就是为什么它被检索为
Object[]
对。。我的问题通过您的第一个选项解决了..我只提到了
{emp[0]}
,而没有提到列名(
{emp.empname}
)…非常感谢..如何修复查询以返回真实列表?谢谢!
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)
    ...
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)
    ...
<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>
getEntityManager().createNativeQuery(
                "SELECT * FROM ...",
                 EntityUser.class
).getResultList();