Как я могу хранить ArrayList & lt; T & gt ;, полученный Сервлем, в сеансе JSP? [Дубликат]

Ну, простыми словами:

Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.

Итак, как это решить:

  1. Отладить и отпустить отладчик ... Он сразу приведет вас к переменной, которая сломана ... Теперь ваша задача - просто исправить это. Используя новое ключевое слово в соответствующем месте.
  2. Если это вызвано некоторыми командами базы данных, потому что объект отсутствует, все, что вам нужно сделать, это выполнить нулевую проверку и обработать его:
    if (i == null) {
        // Handle this
    }
    
  3. Самый сложный. если GC уже собрал объект ... Это обычно происходит, если вы пытаетесь найти объект, используя строки ... То есть, найдя его по имени объекта, может случиться, что GC, возможно, уже очистил его ... Это трудно найти и станет проблемой. Лучшим способом решения этой проблемы является выполнение нулевых проверок везде, где это необходимо в процессе разработки. Это сэкономит вам много времени.

Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);

34
задан Tamer 23 April 2011 в 21:32
поделиться

4 ответа

Здесь вы можете сделать это, используя HttpRequest или HttpSession. И подумайте, что ваша проблема находится в JSP.

Если вы собираетесь использовать внутренний сервлет, выполните следующие действия:

Object obj = new Object();
session.setAttribute("object", obj);

или

HttpSession session = request.getSession();
Object obj = new Object();
session.setAttribute("object", obj);

и после установки вашего атрибута с помощью запроса или сеанса используйте следующие для доступа к нему в JSP,

<%= request.getAttribute("object")%>

или

<%= session.getAttribute("object")%>

. Кажется, ваша проблема в JSP.

Если вы хотите использовать скриптлеты, это должно быть следующим:

<%
Object obj = request.getSession().getAttribute("object");
out.print(obj);
%>

Или использовать выражения следующим образом:

<%= session.getAttribute("object")%>

или использовать EL следующим образом , ${object} или ${sessionScope.object}

5
ответ дан Chathuranga Withana 25 August 2018 в 17:51
поделиться

Объект запроса не является сеансом.

Вы хотите использовать объект сеанса для хранения. Сеанс добавлен в запрос и был ли вы хотите сохранить данные по запросам. Сессия может быть получена из

HttpSession session = request.getSession(true);

. Затем вы можете использовать setAttribute или getAttribute в сеансе.

Более современное руководство по сессиям jsp: http: //courses.coreservlets.com/Course-Materials/pdf/csajsp2/08-Session-Tracking.pdf

1
ответ дан ditkin 25 August 2018 в 17:51
поделиться

Добавьте его в сеанс, а не в запрос.

HttpSession session = request.getSession();
session.setAttribute("object", object);

Кроме того, не используйте сценарии в JSP. Вместо этого используйте EL ; для доступа к object все, что вам нужно, - ${object}.

Основной особенностью технологии JSP версии 2.0 является поддержка языка выражений (EL). Язык выражения позволяет легко получить доступ к данным приложения, хранящимся в компонентах JavaBeans. Например, язык выражения JSP позволяет автору страницы обращаться к компоненту, используя простой синтаксис, такой как ${name} для простой переменной или ${name.foo.bar} для вложенного свойства.

12
ответ дан Matt Ball 25 August 2018 в 17:51
поделиться

Вы не добавляете объект в сеанс, вместо этого вы добавляете его в запрос. Что вам нужно:

HttpSession session = request.getSession();
session.setAttribute("MySessionVariable", param);

В Servlets у вас есть 4 области, где вы можете хранить данные.

  1. Приложение
  2. Сессия
  3. Запрос
  4. Страница

Убедитесь, что вы их понимаете. Подробнее здесь

46
ответ дан milchreis 25 August 2018 в 17:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: