在jsp中迭代ArrayList时出现NullPointerException

时间:2014-09-26 07:26:07

标签: java jsp jstl

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

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。

2 个答案:

答案 0 :(得分:2)

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

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

此外,它可能是一个拼写错误,但您设置了一个名为messages的属性,然后迭代list中名为<c:foreach>的属性...

答案 1 :(得分:0)

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

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