Spring WebFlow:如何在JSP中获取请求参数?

时间:2011-03-30 08:55:02

标签: jsp spring-webflow

我正在使用Spring WebFlow和Spring MVC。当我请求页面例如http://localhost:8080/testapp/index.html?param=100时,WebFlow重定向到http://localhost:8080/testapp/index.html?execution=e3s1并且无法在jsp中获得paramparam在某处丢失。如何使这个工作?

这种情况的另一个例子 - 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 个答案:

答案 0 :(得分:5)

回答有关Spring WebFlow(SWF)和请求参数的一般性问题:

在收到第一个请求(包括请求参数)后,Spring WebFlow正在向您的浏览器发送302重定向,这会强制另一个GET。此GET请求不包括您的原始请求参数。如您所述,您可以使用流逻辑中的requestParameters映射来访问这些参数。然后,您可以在viewScope或requestScope上设置请求参数,但您应该问自己为什么需要在JSP中获取这些请求参数。

您的视图层(JSP)中是否存在逻辑,应该在控制器层(Web流)中执行?是否需要绑定到模型对象(在视图状态下使用模型属性)?

如果您只处理单个参数,那么您可以将其设置在视图或请求范围内。但是如果你有几个,也许你需要一个可以用作模型属性的命令对象。 SWF将处理将参数绑定到此对象,并将此对象公开给您重定向到的视图。

更具体地说,关于Spring Security / login:

看起来您可能正在尝试将您的登录页面实现为实际的Web流...我将看一下SWF文档,它有一个关于保护Webflow的简短章节。登录页面/进程不会被定义为流程中的状态。

答案 1 :(得分:0)

您可以添加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>
    ...

到你的流程。