2011-03-30 65 views
2

我正在使用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 WebFlow:如何在JSP中獲取請求參數?

這種情況另一個例子 - 春季安全配置如下圖所示:

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

當用戶登錄失敗,我不能在login.jsp得到loginfail參數。

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

我可以訪問請求參數流量,但是...我必須設置視圖/ flowScope變量爲我所有的請求參數象下面這樣?

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

回答

5

要獲得關於訪問Spring WebFlow(SWF)和請求參數通用的問題:

收到您的第一個請求(包括請求參數)後,春天的Webflow正在發送您的瀏覽器302重定向這迫使另一個GET。此GET請求不包含您的原始請求參數。就像您指出的那樣,您可以使用流邏輯中的requestParameters映射來訪問這些參數。然後,您可以在viewScope或requestScope上設置請求參數,但您應該問自己爲什麼需要在JSP中獲取這些請求參數。

您在視圖層(JSP)中執行的邏輯是否真的應該在控制器層(Web流)中執行?你是否需要綁定到模型對象(在視圖狀態下使用模型屬性)?

如果您只處理一個參數,那麼您可以將其設置在視圖或請求範圍內。但是如果你有幾個,也許你需要一個你可以用作模型屬性的命令對象。 SWF將處理綁定到此對象的參數,並將此對象公開給您重定向到的視圖。

更具體地說,對於春季安全/登錄:

看來,你可能會想實現你的登錄頁面,作爲一個實際的Webflow ...我會看看的SWF文件,它有一個關於確保Web流程的簡短章節。登錄頁面/進程不會被定義爲流程中的狀態。

+0

感謝您的全面回答 – marioosh 2011-06-19 07:23:36

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> 
    ... 

您的流程。

相關問題