Использование request.setAttribute на странице JSP - PullRequest
20 голосов
/ 23 октября 2008

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

Ответы [ 7 ]

24 голосов
/ 23 октября 2008

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

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

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

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

4 голосов
/ 13 марта 2014

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

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

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

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

SubFamily subFam = (SubFamily)request.getSession().getAttribute("SUBFAMILY");
4 голосов
/ 25 октября 2008

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

3 голосов
/ 25 сентября 2014

Вы можете сделать это, используя атрибуты 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.

2 голосов
/ 07 апреля 2010

Попробуйте

request.getSession().setAttribute("SUBFAMILY", subFam);
request.getSession().getAttribute("SUBFAMILY");
1 голос
/ 24 октября 2008

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

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

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

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

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

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

0 голосов
/ 13 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...