Запрос набора приписывает, когда Форма ОТПРАВЛЯЕТСЯ

Там какой-либо путь состоит в том, чтобы установить атрибуты запроса (не параметры), когда форма отправляется?

Проблема, которую я пытаюсь решить: у Меня есть страница JSP, отображающая некоторые данные в нескольких выпадающих списках. То, когда форма отправляется, мой сервлет Контроллера обрабатывает этот запрос (на основе параметров устанавливало/указывало в форме), и перенаправления к той же странице JSP, которая, как предполагается, отображает дополнительные детали. Я теперь хочу отобразить те же/более ранние данные в выпадающих списках, не имея необходимость повторно вычислять или повторно вычислять для получения тех же самых данных.

И на упомянутой странице JSP, выпадающие списки в форме заполняются данными, которые указаны через атрибуты запроса. Прямо сейчас, после того, как Форма ОТПРАВЛЯЕТСЯ, и я перенаправляюсь к той же странице JSP, выпадающие списки пусты, потому что необходимые атрибуты запроса не присутствуют.

Я - вполне n00b когда дело доходит до веб-приложений, таким образом, очевидное и легкое решение этой проблемы выходит из меня в данный момент!

Я открыт для предложений о том, как реструктурировать поток управления в Сервлете.

Некоторые детали об этом приложении: стандартный Сервлет + JSP, JSTL, работающий в Apache Tomcat 6.0.

Спасибо.

5
задан ssahmed555 3 June 2010 в 16:19
поделиться

1 ответ

... и перенаправляет на ту же JSP-страницу...

Здесь надо ставить не редирект, а forward. Т.е. не do

response.sendRedirect("page.jsp");

а do

request.getRequestDispatcher("page.jsp").forward(request, response);

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

В JSP вы можете получить доступ к параметрам запроса с помощью ${param} в EL, и вы можете получить доступ к атрибутам запроса таким же образом с помощью ${attributeKey}, где attributeKey - это ключ атрибута, который вы использовали для установки объекта в области видимости запроса в сервлете следующим образом:

request.setAttribute("attributeKey", someObject);

Что касается сохранения значений HTML ввода в JSP, вам просто нужно установить элемент value атрибута соответственно значению параметра запроса:

<input name="foo" value="${param.foo}">

Это печатает результат request. getParameter("foo") в тексте шаблона. Однако это сопряжено с XSS риском, поэтому лучше экранировать любой управляемый пользователем ввод с помощью fn:escapeXml() JSTL следующим образом:

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
...
<input name="foo" value="${fn:escapeXml(param.foo)}">

Сохранение выбранного варианта в выпадающем списке - это немного другая история. В основном вам нужно установить атрибут selected элемента . Предположим, что вы - как это обычно делается - используете для отображения Map или, возможно, List значений опций, вы можете решить эту проблему следующим образом (предполагая, что ${countries} является Map, которую вы поместили в качестве атрибута в область видимости запроса, сессии или приложения):

<select name="country">
    <c:forEach items="${countries}" var="country">
        <option value="${country.key}" ${country.key == param.country ? 'selected' : ''}>${country.value}</option>
    </c:forEach>
</select>

Это печатает атрибут selected, когда текущий итерируемый ключ опции равен представленному ключу в карте параметров запроса.

4
ответ дан 15 December 2019 в 00:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: