Spring webflow + портал. Как получить параметры URL-адреса в определении потока?

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

Вот моя конфигурация контекста

<!-- Maps portlet modes to handlers -->
<bean id="portletModeHandlerMapping" class="org.springframework.web.portlet.handler.PortletModeHandlerMapping">
    <property name="portletModeMap">
        <map>
            <entry key="view">
                <bean class="com.mycompany.login.portlet.ViewFlowHandler" />
            </entry>
        </map>
    </property>
</bean>

<!-- Enables FlowHandlers -->
<bean class="org.springframework.webflow.mvc.portlet.FlowHandlerAdapter">
    <property name="flowExecutor" ref="flowExecutor"/>
</bean>

<!-- Executes flows: the central entry point into the Spring Web Flow system -->
<webflow:flow-executor id="flowExecutor">
</webflow:flow-executor>

<!-- The registry of executable flow definitions -->
<webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderService">
    <webflow:flow-location path="classpath:flows/login-flow.xml" />
    <webflow:flow-location path="classpath:flows/main-flow.xml" />
    <webflow:flow-location path="classpath:flows/pwd-recovery-flow.xml" />
</webflow:flow-registry>

<webflow:flow-builder-services id="flowBuilderService" view-factory-creator="viewFactoryCreator"/>

<bean id="viewFactoryCreator" class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator">  
    <property name="viewResolvers">  
        <list>  
            <ref bean="viewResolver"/>  
        </list>  
    </property> 
</bean>  

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/flow-views/"/>
    <property name="suffix" value=".jsp"/>
</bean>


<!-- beans for business logic -->
<bean id="authService" 
      class="com.mycompany.login.portlet.service.AuthService" 
      scope="prototype" />

<!-- constants -->
<bean id="flowNames" class="com.mycompany.login.portlet.Flows" scope="singleton">
    <property name="loginMain"><value></value></property>
    <property name="passwordRecover"><value>pwd-recovery</value></property>
    <property name="finish"><value>finish</value></property>
    <property name="nflow"><value></value></property>
</bean>

My flow handler:

package com.mycompany.login.portlet;

import javax.servlet.http.HttpServletRequest;

import org.springframework.webflow.core.collection.LocalAttributeMap;
import org.springframework.webflow.core.collection.MutableAttributeMap;
import org.springframework.webflow.mvc.portlet.AbstractFlowHandler;


public class ViewFlowHandler extends AbstractFlowHandler{
    public String getFlowId() {
        return "main-flow";
    }

}

И точкой входа является основной поток, который на основе параметра get в URL-адресе с именем «flo» будет перенаправляться в подпоток. В настоящее время, когда я пытаюсь получить доступ к этому напрямую, моя карта requestParameter пуста. Я не знаю, какой будет URL в этом случае. Пример текущего URL-адреса: «http://localhost:8080/portal/portal/default/Login/Mycompany+LoginWindow?flo=pwd-recovery». Также позже я хочу передать дополнительные параметры в URL-адресе, такие как идентификатор пользователя и т. д., но прямо сейчас я получаю пустую карту для requestParameters. Вот мое определение потока точки входа

основной поток.xml

http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">

<action-state id="branch">
    <on-entry>
        <!-- <evaluate expression="flowNames.setNflow(requestParameters.flo)"/> -->
        <evaluate expression="flowNames.checking(requestParameters)"/>
    </on-entry>

    <evaluate expression="flowNames.enableTransition()" />
    <transition on="yes" to="proceed" />

</action-state>


<action-state id="proceed">

    <!--<if test="flowNames.nflow==''" then="login"/>
    <if test="flowNames.nflow=='pwd-recovery'" then="pwd-recovery"/>
    <if test="flowNames.nflow=='finish'" then="finish-main"/>-->

    <on-entry>
        <!-- <evaluate expression="flowNames.setNflow(requestParameters.flo)"/> -->
        <evaluate expression="flowNames.checking(requestParameters)"/>
    </on-entry>

    <evaluate expression="flowNames.nflow"/>
    <transition on="pwd-recovery" to="pwd-recovery"/>
    <transition on="finish" to="finish-main"/>
    <transition to="login"/>

</action-state>

<subflow-state id="login" subflow="login-flow">
    <transition on="finish-login" to="proceed"/>
</subflow-state>

<subflow-state id="pwd-recovery" subflow="pwd-recovery-flow">
    <transition on="finish-pwd" to="proceed"/>
</subflow-state>

<end-state id="finish-main"/>


person Rickster    schedule 31.12.2010    source источник
comment
Вы использовали неправильный тег. SWF расшифровывается как ShockWave Flash. Я починил это.   -  person BalusC    schedule 11.11.2011


Ответы (1)


Я думаю, что ваша проблема связана не столько с Spring Webflow, сколько с портлетами. Проверить:

http://wpcertification.blogspot.com/2010/05/getting-query-string-of-portal-url-from.html

Здесь показан один из способов получения параметров запроса из портлета. Однако я не знаю, как это сделать из веб-потока Spring, хотя я пытаюсь выяснить это!!!

person Mark D    schedule 08.03.2012