【问题标题】:PropertyNotFoundException while iterating arraylist in jstl在jstl中迭代arraylist时出现PropertyNotFoundException
【发布时间】:2017-08-12 16:09:29
【问题描述】:

我在 servlet 中有一个数组列表,我在 jsp 中使用它。

ArrayList<String> list =new ArrayList<String>();
list = (ArrayList<String>)request.getAttribute("iInfoType");

我正在使用jstl来解析数组列表

<c:forEach items="<%=list %>" var="element">    
<c:out value="${element[10].id}"/>
</c:forEach>

但出现错误 PropertyNotFoundException。 我该怎么办

【问题讨论】:

  • 发布完整的异常堆栈跟踪,并停止使用脚本。 JSTL 使用 JSP EL,而不是 scriptlet。忘记 scriptlet 的存在。它们不应该被使用多年和多年。
  • 另外,为什么在使用存储在请求中的列表再次初始化变量之前,使用新的空列表初始化变量?

标签: jsp servlets arraylist jstl


【解决方案1】:

String 没有id 属性,所以你需要改变你的jstl,如下所示:

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

另外,当您使用c:forEach 时,您正在迭代列表,因此使用${element} 会为您提供list 中存在的元素。

还有一点,如果list已经被servlet/controller设置在请求范围内,就不需要如上图那样使用scriptlet了(即可以像@一样直接访问list 987654330@)。

如果要访问list的index,可以使用varStatus,如下图:

<c:forEach items="list" var="element" varStatus="myList">    
    <c:out value="${myList.index}"/>
</c:forEach>

在您的 JSP 页面中使用 scriptlet 不是最佳实践,因此我建议不要使用它们,请查看 here 以获取有关 JSP 最佳实践的更多详细信息。我从链接中添加了以下关键点:

在 HTML 文档中嵌入一些 Java 代码(或小脚本)可能不会 适合所有 HTML 内容开发人员,也许是因为他们这样做 不懂 Java 语言,也不关心学习它的语法。

【讨论】:

  • 如何访问指定索引处的元素?
  • 所以,您不想迭代list?
  • 我想。但也希望将每个元素与它们的索引一起使用。
  • 那么你想知道当前元素的索引吗?
  • 没有。想要在应用程序的某处使用列表的每个索引。所以想和索引号一起使用。
猜你喜欢
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 1970-01-01
相关资源
最近更新 更多