【问题标题】:Converting Object[] array to List in java在java中将Object []数组转换为List
【发布时间】:2015-05-12 10:58:45
【问题描述】:

在我使用数据表创建的 primefaces 3.5 表单上,rowKey 值没有作为列表返回,因此我收到以下错误:

JBWEB000309: type JBWEB000066: Exception report

JBWEB000068: message For input string: "foreignPartyId"

JBWEB000069: description JBWEB000145: The server encountered an internal error that prevented it from fulfilling this request.

JBWEB000070: exception

javax.servlet.ServletException: For input string: "foreignPartyId"
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
JBWEB000071: root cause

java.lang.NumberFormatException: For input string: "foreignPartyId"
    java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    java.lang.Integer.parseInt(Integer.java:492)
    java.lang.Integer.parseInt(Integer.java:527)
    javax.el.ListELResolver.toInteger(ListELResolver.java:407)
    javax.el.ListELResolver.getValue(ListELResolver.java:199)
...

我知道原因是因为我试图用 Object[] 数组而不是 List 中的值填充数据表。 Object[] 数组实际上是来自 getResultList() 的值,使用 createNativeQuery 方法查询 Oracle 数据库。

我的问题是:如何将 Object[] 数组中的值转换为 List 以便填充数据表?

我尝试过使用 Arrays.toList() 方法,然后通过将值添加到列表中进行迭代,但我知道这只是返回支持数组的固定大小列表。它不返回值列表。

任何帮助将不胜感激。如果我没有提供足够的细节,我深表歉意。谢谢。

【问题讨论】:

    标签: java arrays list primefaces


    【解决方案1】:

    尝试使用 ArrayList:

    ArrayList<Object> list = new ArrayList(Arrays.asList(yourArray));
    

    然后使用添加任何你想要的元素到列表中

    list.add(newItem)
    

    【讨论】:

    • 感谢您的回复。我想知道如果不是 Arrays.**toList** 你的意思是 Arrays.**asList**?我尝试使用 Arrays.asList 但仍然收到错误消息。你能澄清一下吗?再次感谢!! :-)
    • 这是“asList()”,我的错:感谢您注意到错误。您确定 Object[] 代表查询结果而不是查询返回的单行吗?如果是这样,那么您不能向对象数组添加元素就更简单了,因为这意味着尝试更改表数据。
    • 好问题。事实上,你让我重新考虑我的查询。这个特定的查询很可能只返回一行。所以,实际上我想知道是否应该使用 getSingleResult() 而不是 getResultList()。无论哪种方式,我想我仍然需要弄清楚如何获取返回的结果集并填充数据表。
    【解决方案2】:

    getResultList 方法确实返回 List&lt;Object[]&gt;,例如,如果您查询多个实体并且结果无法自动映射到现有实体类。

    为避免这种情况,您可以在 JPA 查询中考虑这样的构造函数表达式:

    Query query = getEntityManager()
      .createQuery("SELECT NEW my.Foo(a.id, b.somethingelse) FROM --- ");
    

    getResultList() 方法现在将返回一个List&lt;Foo&gt;,并且您不会遇到您提到的问题。

    【讨论】:

    • 感谢您的回复。您能否在 JPA 查询示例中扩展构造函数表达式的“my.Foo”部分?我不知道如何翻译它以适应我的情况。谢谢。
    • 'Foo' 在这里只是某种数据传输对象的虚拟名称。只需创建一个 POJO,其中包含您要在数据表中显示的所有字段
    猜你喜欢
    • 2013-04-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 2020-08-18
    相关资源
    最近更新 更多