Я показываю список, содержащий объекты, которые хранят информацию о сообщении. Список загружается через получение запроса как такового:
ArrayList<MessageModel> list = (ArrayList<MessageModel>) request.getAttribute("msgList");
Я пытаюсь отобразить информацию, содержащуюся в каждом объекте как таковой:
for(MessageModel msg : list){
String messageTo = msg.toAddress;
String messageSub = msg.messageSubject;
out.println(messageTo+ " " +messageSub);
}
Я получаю исключение 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 говорит, что он не может разрешить список переменных.
РЕДАКТИРОВАТЬ:
Я пересылаю запрос с сервлета, который обрабатывает логин пользователя следующим образом:
ArrayList<MessageModel> msglist = MessageModel.getRecievedMessages(username);
request.setAttribute("msgList", msglist);
Я пытаюсь передать ArrayList, который содержит объекты сообщения, а затем перебирает список и отображает его в jsp.
Есть ли возможность для самой jsp получить информацию? У меня есть отдельный класс java, который обрабатывает сообщения с кучей вспомогательных функций. Могу ли я вызвать метод, который извлекает все эти сообщения и отображает их без явной установки атрибута запроса в сервлет? Потому что я буду перемещаться между другими страницами приложения.
Извините, если мой словарь был отключен, это первый раз, когда я работаю с jsp и сервлетами.
NullPointerException
в цикле foreach, вероятно, связано с тем, что переменная list
имеет значение null
. Вы можете проверить, что list
не является null
до его повторения.
Что касается JasperException
, можете ли вы описать, как вы JasperException
к JSP?
Кроме того, это, вероятно, опечатка, но вы устанавливаете атрибут с именем messages
, затем вы перебираете атрибут с именем list
в <c:foreach>
...
Я решил эту проблему, используя методы getter и setter, чтобы получить членов класса MessageModel.
EL tag wiki: эта статья помогла мне понять, как взаимодействовать с классом java и jsp.