Используя запрос.setAttribute на странице JSP
можно использовать request.setAttribute
на странице JSP, а затем на HTML отправить получить тот же атрибут запроса в Servlet
?
7 ответов
нет. К сожалению, объект запроса доступен только до завершения загрузки страницы - после его завершения вы потеряете все значения в нем, если они не были сохранены где-то.
Если вы хотите сохранить атрибуты через запросы, вам нужно либо:
- есть скрытый input в форме, например
<input type="hidden" name="myhiddenvalue" value="<%= request.getParameter("value") %>" />
. Затем это будет доступно в сервлете в качестве параметра запроса. - поместите его в сеанс (см.
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, Как:
поэтому я думаю, что мне нужно будет продолжить любой из двух вариантов, предложенных Филлом.
Я думаю, что Фил-это правильный вариант запроса до загрузки страницы. поэтому если мы хотим послал значение на другую страницу мы хотим установить в скрытом теге или в сторону, если вам просто нужно значение только на другой странице и не более того то скрытые теги-это лучший вариант, если вам нужно это значение более чем на одной странице в это время сессия-это лучше, чем скрытые теги.