Использование request.setAttribute на странице JSP
Можно ли использовать request.setAttribute
на странице JSP, а затем в HTML Submit получить тот же атрибут запроса в Servlet
?
7 ответов
Нет. К сожалению, объект Request доступен только до тех пор, пока страница не завершит загрузку - как только она будет завершена, вы потеряете все значения в ней, если они не были где-то сохранены.
Если вы хотите сохранить атрибуты в запросах, вам нужно:
- Иметь скрытый ввод в вашей форме, такой как
<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); %>
В сервлете (связан с URL-шаблоном "Enter.do"):
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, то это не даст вам нулевое значение как " запрос, который создал JSP, и запрос, который генерируется при отправке JSP, являются совершенно разными запросами, и любые атрибуты, помещенные в первый, не будут доступны во втором ".
Я имею в виду что-то вроде этого на странице 2 не удается:
Где то же самое сработало в случае страницы 1, например:
Поэтому я думаю, что мне нужно будет перейти к любому из двух вариантов, предложенных Филлом.
Я думаю, что Фил правильный вариант запроса доступен до загрузки страницы. поэтому, если мы хотим отправить значение на другую страницу, мы хотим установить значение в скрытом теге или в стороне от сеанса, если вам просто нужно значение только на другой странице, и не более того, тогда скрытые теги являются лучшим вариантом, если вам нужно это значение на более чем одной странице в то время сеанс является лучшим вариантом, чем скрытые теги.