Spring WebFlow: как получить параметры запроса в JSP? - PullRequest
2 голосов
/ 30 марта 2011

Я использую Spring WebFlow вместе со Spring MVC. Когда я запрашиваю страницу, например, http://localhost:8080/testapp/index.html?param=100 WebFlow делает перенаправление на http://localhost:8080/testapp/index.html?execution=e3s1 и не может получить param в jsp, param потеряно где-то. Как заставить это работать?

Другой пример этой ситуации - Spring Security, настроенный как показано ниже:

<security:form-login authentication-failure-url="/login.html?loginfail=1" login-page="/login.html" />

Когда не удается войти в систему, я не могу получить параметр loginfail в login.jsp.

<c:if test="${!empty param.loginfail}">Login error!</c:if>

Я могу получить доступ к параметрам запроса в потоке, но ... Нужно ли мне устанавливать переменные view / flowScope для всех параметров запроса, как показано ниже?

<set name="viewScope.loginfail" value="requestParameters.loginfail" />

Ответы [ 2 ]

5 голосов
/ 05 мая 2011

Чтобы ответить на ваш общий вопрос о Spring WebFlow (SWF) и параметрах запроса:

После получения вашего первого запроса (который включает параметр запроса) Spring WebFlow отправляет вашему браузеру перенаправление 302, которое вызывает другой GET. Этот запрос GET не включает ваши исходные параметры запроса. Как вы заметили, вы можете получить доступ к этим параметрам, используя карту requestParameters в вашей логике потока. Затем вы можете установить параметры запроса в viewScope или requestScope, но вы должны спросить себя, почему вам нужно получить эти параметры запроса в вашей JSP.

Есть ли логика, которую вы выполняете на уровне представления (JSP), которая действительно должна выполняться на уровне контроллера (веб-поток)? Нужно ли привязываться к объекту модели (используя атрибут модели в режиме просмотра)?

Если вы имеете дело только с одним параметром, тогда вы, вероятно, можете просто установить его в области просмотра или запроса. Но если у вас их несколько, возможно, вам нужен объект команды, который вы можете использовать в качестве атрибута модели. SWF обрабатывает привязку параметров к этому объекту и предоставляет этот объект представлению, к которому вы перенаправлены.

Более конкретно, относительно Spring Security / login:

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

0 голосов
/ 28 сентября 2011

Вы можете добавить ie.

<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/webflow
                          http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">

    <input name="param" required="true" />

    <on-start>
        <evaluate expression="someAction.getSomething(param)" result="conversationScope.myParam"/>
    </on-start>
    ...

к вашему процессу потока.

...