Справочная информация:
Я работаю над проблемой, в которой я случайным образом генерирую результат на основе нажатых кнопок. Я использую Java контроллеры и JSP & JSTL. Мне нужно было найти решение, которое я нашел, но я пытался найти смысл решения, но у меня было очень трудное время с одной порцией, которую я вставлю ниже. Обратите внимание, что ниже приведен лишь фрагмент из основных частей, которые ставят мне проблему, и реальный код работает хорошо. Я пытаюсь понять, как это работает хорошо, когда я не понимаю основной механизм его работы:
В контроллере:
public String Index(HttpSession session){
if(session.isNew()){
**ArrayList<> logList2 = new ArrayList<>();
session.setAttribute(“actionJournal”, logList2);**
}
return “index2.jsp”;
}
public String Form(HttpSession session){
if(val == 1){
**ArrayList<String> list1 = (ArrayList<String>) session.getAttribute(“actionJournal”);**
list1.add(0, “yo yo yo”);
session.setAttribute(“logList”, list1);
}
if(val == 2){
ArrayList<> list2 = (ArrayList<>) session.getAttribute(“actionJournal”);
list2.add(0, “ha ha ha”);
session.setAttribute(“logList”, list2);
}
return “redirect:/“;
}
В индексе 2. jsp:
<c:forEach items=“${logList}" var="event">
<c:out value=“${event} escapeXml=“false”/>
</c:forEach>
Что происходит, когда я запускаю код: при первом посещении домашней страницы счетчик равен 0 (не входит в приведенный выше код), и сообщения изначально не отображаются, но когда я нажимаю кнопка, счетчик изменяется вверх или вниз на основе случайного числа (не включенного в приведенный выше код), и на экране отображается сообщение о том, что я либо потерял, либо получил деньги (сообщение в коде выше обозначено как йо йо или ха ха ха). Когда я снова нажимаю ту же кнопку или другую, происходит другое случайное изменение в счетчике вместе с новым сообщением, и эти сообщения накладываются друг на друга (так что вы можете получить журнал активности всех сообщений) -> это представлен кодом forEach l oop в index2. jsp коде, который я вставил ниже кода контроллера. Это желаемый результат. То, что я не получаю, это как решению удается получить журнал всех сообщений.
Что меня особенно смущает about: Части в приведенном выше коде, которые я вставил в звездочки, являются частями, которые, если я изменил их каким-либо другим способом, приводят к тому, что появляющиеся сообщения удаляют сообщение, которое было там ранее. То есть он больше не хранит журнал всех моих действий до этого момента и показывает только самое последнее сообщение, которое должно появиться. Я сузил его до тех строк кода, потому что, когда я изменил все остальное, программа все еще работала правильно.
Я не могу gr asp, почему list1 или list2 должны = (ArrayList) session.getAttribute ( «actionJournal»), когда это не похоже на actionJournal или даже оригинальный список массивов logList2 обновляется при нажатии кнопки, только list1 или list2. Я думаю, что это как-то связано с session.isNew () ->, но я ничего не могу понять.
Мне кажется, что actionJournal представляет пустой список (logList2), и что каждый раз, когда генерируется list1 или list2, он наследуется от пустого списка. Все же это работает. Но когда я устанавливаю list1 или list2 = new ArrayList (), он показывает только самые последние сообщения, а не весь журнал сообщений.