Подтвердить что ты не робот

Использование request.setAttribute на странице JSP

Можно ли использовать request.setAttribute на странице JSP, а затем в HTML Submit получить тот же атрибут запроса в Servlet?

4b9b3361

Ответ 1

Нет. К сожалению объект Request доступен только до тех пор, пока страница не завершит загрузку - после ее завершения вы потеряете все значения, если они не были где-то сохранены.

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

  • Введите скрытый ввод в вашей форме, например <input type="hidden" name="myhiddenvalue" value="<%= request.getParameter("value") %>" />. Затем это будет доступно в сервлете как параметр запроса.
  • Поместите его в сеанс (см. request.getSession() - в JSP это доступно как просто session)

Я рекомендую использовать сеанс, поскольку его легче управлять.

Ответ 2

Ответ Фила Сакре был правильным, однако сеанс не должен использоваться только для него. Вы должны использовать это только для значений, которые действительно необходимы для жизни в течение всего сеанса, например, для входа в систему. Общеизвестно, что люди злоупотребляют сеансом и сталкиваются с большим количеством проблем, особенно при работе с коллекцией или при возврате пользователей на страницу, которую они ранее посещали, только чтобы найти, что у них есть значения, оставшиеся от предыдущего посещения. Умная программа максимально минимизирует объем переменных, плохой использует сеанс слишком много.

Ответ 3

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

Пример

: на странице JSP или сервлета

request.getSession().setAttribute("SUBFAMILY", subFam);

а на любой принимающей странице используйте приведенные ниже строки для извлечения сеанса и данных:

SubFamily subFam = (SubFamily)request.getSession().getAttribute("SUBFAMILY");

Ответ 4

Попробуйте

request.getSession().setAttribute("SUBFAMILY", subFam);
request.getSession().getAttribute("SUBFAMILY");

Ответ 5

Вы можете сделать это, используя атрибуты pageContext:

В JSP:

<form action="Enter.do">
    <button type="SUBMIT" id="btnSubmit" name="btnSubmit">SUBMIT</button>
</form>
<% String s="opportunity";
pageContext.setAttribute("opp", s, PageContext.APPLICATION_SCOPE); %>

В сервлетах (связанных с URL-адресом "Enter.do" ):

String s=(String) request.getServletContext().getAttribute("opp");

Существуют другие области применения, кроме APPLICATION_SCOPE, такие как SESSION_SCOPE. APPLICATION_SCOPE используется для атрибутов ServletContext.

Ответ 6

Исправить меня, если не так... Я думаю, что запрос сохраняется между последовательными страницами.

Подумайте, что вы переходите со страницы 1 → стр. 2 → стр. 3.

У вас есть определенное значение, заданное в объекте запроса с помощью setAttribute со страницы 1, которое вы извлекаете на странице 2 с помощью getAttribute, а затем, если вы попытаетесь установить что-то снова в том же объекте запроса, чтобы получить его на стр. 3, тогда он не даст вам нулевой значение как "запрос, создавший JSP, и запрос, который генерируется при отправке JSP, - это совершенно разные запросы, и любые атрибуты, помещенные в первый, не будут доступны на втором".

Я имею в виду что-то вроде этого на странице 2 не удается:

Где то же самое работает в случае страницы 1, например:

Итак, я думаю, мне нужно будет перейти к одному из двух вариантов, предложенных Филом.

Ответ 7

Я думаю, что фил - это правильный вариант запроса, доступный до загрузки страницы. поэтому, если мы хотим отправить значение на другую страницу, мы хотим установить скрытый тег или на стороне сеанса, если вам просто нужно значение только на другой странице, и не более того, тогда скрытые теги являются лучшим вариантом, если вам нужно это значение на более чем одной странице в то время сеанс является лучшим вариантом, чем скрытые теги.