【问题标题】:Having exception in accessing a list through JSTL通过 JSTL 访问列表时出现异常
【发布时间】:2014-08-16 06:39:57
【问题描述】:

我正在尝试访问这样的:

我传递到JSP页面

the list through request.setAttribute("list", list);

并尝试访问

<c:foreach items="${list}" var="element"}>

<li> ${element.name} ${element.price} </li>

</c:foreach>

但我得到 NumberFormatException。如何正确访问列表?

【问题讨论】:

  • 您的List 包含Object[] 对象,而不是Route 对象。你是如何破坏类型安全的?
  • 这个问题相当复杂。我将尝试更好地解释它。我通过 JPA 查询获得列表,其中我只获得表 Route 的两列。所以如果我只得到两列,列表不应该是路由元素,而是什么?
  • 我认为要正确解决问题我应该遵循这个例子stackoverflow.com/questions/17202334/…
  • 嗯,是的,您需要设置 JPA 查询以返回正确的实体。

标签: java jsp collections jstl


【解决方案1】:

如果您从表中仅选择几列,JPA 将为返回的每一行返回一个对象数组。即它将返回一个List&lt;Object[]&gt; 对象。如果您想取回Route 对象的列表,您可以在Route 类中编写一个构造函数,该构造函数接受两个值(名称和价格,并在构造函数中适当地设置值。然后您可以在 JPA 中使用构造函数如下查询以获取 Route 对象: select new yourpackage.Route(name, price) from Route

【讨论】:

    【解决方案2】:

    您的 JSTL 中有两个问题:

    <c:foreach items="${list}" var="element"}>
        ...
    </c:foreach>
    
    1. 它的c:forEach 不是c:foreach
    2. 最后多了一个}

    应该是这样的:

    <c:forEach items="${list}" var="element">
         ...
    </c:forEach>
    

    有两种选择。根据需要尝试任何一种。

    1. 如果列表包含Object[],则使用${element[0]}
    2. 如果列表包含Route,则使用${element['name']}${element.name}${element.getName()}。确保 Route 类包含 name 作为具有 getter 和 setter 方法的实例变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-04
      • 2010-10-01
      • 2013-03-28
      • 1970-01-01
      相关资源
      最近更新 更多