我正在显示一个列表,其中包含存储消息信息的对象。通过获取请求来加载列表:
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。
答案 0 :(得分:2)
foreach循环中的NullPointerException
可能是由于list
变量为null
。在迭代之前,您可以检查list
不是null
。
关于JasperException
,您能描述一下如何转发到JSP吗?
此外,它可能是一个拼写错误,但您设置了一个名为messages
的属性,然后迭代list
中名为<c:foreach>
的属性...
答案 1 :(得分:0)
我通过使用创建getter和setter方法来获取MessageModel的类成员来解决这个问题。
EL tag wiki:这篇文章帮助我理解了如何连接java类和jsp。