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

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

7 ответов


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

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

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

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


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


Если вы хотите, чтобы ваши запросы повторится попробуйте это:

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

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

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

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

вы можете сделать это с помощью атрибутов 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); %>

в сервлете (связан с " Enter.do " url-pattern):

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

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


попробовать

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

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

думаю, вы переходите со страницы 1--> Страница 2-->Страница 3.

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

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

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

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


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