【问题标题】:NullPointerException when iterating over ArrayList in jsp在jsp中迭代ArrayList时出现NullPointerException
【发布时间】:2014-11-21 03:35:09
【问题描述】:

我正在显示一个列表,其中包含存储消息信息的对象。列表是通过获取请求来加载的:

ArrayList<MessageModel> list = (ArrayList<MessageModel>) request.getAttribute("msgList");

我正在尝试显示每个对象中包含的信息:

for(MessageModel msg : list){
                String messageTo = msg.toAddress;
                String messageSub = msg.messageSubject;
                out.println(messageTo+ " " +messageSub);
            }

我在 for each 语句中收到 NullPointerException。

顺便说一句,我正在使用这种方法进行调试,因为我想检查我是否可以显示 MessageModel 对象的内容。我尝试使用 JSTL forEach 标记,但无法访问对象属性。

 <c:forEach items="${list}" var="current">
     <li><c:out value="${current.toAddress}"/></li>
 </c:forEach>

我这样设置属性:

 ArrayList<MessageModel> list =(ArrayList<MessageModel>) request.getAttribute("msgList");
 pageContext.setAttribute("messages", list);

这会导致运行时出现以下错误消息:

org.apache.jasper.JasperException: /inbox.jsp (line: 37, column: 12) According to TLD or attribute directive in tag file, attribute items does not accept any expressions

IntelliJ 说它无法解析变量列表。

编辑:

我转发来自处理用户登录的 servlet 的请求,如下所示:

 ArrayList<MessageModel> msglist = MessageModel.getRecievedMessages(username);
 request.setAttribute("msgList", msglist);

我正在尝试传递包含消息对象的 ArrayList,然后遍历列表并将其显示在 jsp 中。

jsp本身是否有可能获取信息?我有一个单独的 java 类,它使用一堆辅助函数处理消息。那么我可以调用检索所有这些消息并显示它们的方法,而无需在 servlet 中显式设置请求属性吗?因为我将在应用程序的其他页面之间导航。

对不起,如果我的词汇量不够,这是我第一次使用 jsp 和 servlet。

【问题讨论】:

  • 你是如何在请求范围内设置列表的,请显示

标签: java jsp jstl


【解决方案1】:

foreach 循环中的NullPointerException 可能是由于list 变量为null。您可以在迭代之前检查list不是null

关于JasperException,您能描述一下您是如何转发到JSP 的吗?

另外,这可能是一个错字,但是您设置了一个名为 messages 的属性,然后在 &lt;c:foreach&gt; 中迭代了一个名为 list 的属性...

【讨论】:

  • 抱歉打错了,我编辑了原始帖子,提供了更多信息。
【解决方案2】:

我通过创建 getter 和 setter 方法来获取 MessageModel 的类成员解决了这个问题。

EL tag wiki:这篇文章帮助我理解了如何接口一个java类和一个jsp。

【讨论】:

    猜你喜欢
    • 2013-04-30
    • 2017-08-12
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多