2010-12-31 3 views
2

Ich bin ein wenig neu auf den Portalen und Spring Webflow und versuche, sie für die Einstellung der Flüsse für verschiedene Benutzeraufgaben zu kombinieren. Mein Problem ist, dass ich eine direkte URL zum ersten Zustand erzeugen muss und den Namen des Unterflusses als Parameter übergeben muss, damit der rechte Unterfluss von dort weiter ausgeführt wird - ich weiß nicht, wie man diesen Parameter erhält.Spring webflow + portal - Wie erhalten Sie URL-Parameter in der Flussdefinition?

Hier ist mein Kontext Config

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

Mein 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"; 
    } 

} 

Und der Eintrittspunktes ist die Hauptströmung, die in der URL auf den GET-Parameter basierend "flo" wird zu einem Teilfluss umgeleitet. Derzeit, wenn ich versuche, direkt darauf zuzugreifen, ist meine requestParameter-Map leer. Ich weiß nicht, was die URL in diesem Fall sein würde. Ein Beispiel für die aktuelle URL ist "http: // localhost: 8080/portal/portal/default/Login/Mycompany + LoginWindow? Flo = pwd-recovery". Auch später möchte ich noch weitere Parameter in der URL eingeben wie zB userid etc., aber ich bekomme jetzt eine leere Map für requestParameters. Hier ist meine Eintrittspunkt Flussdefinition

Haupt flow.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"/> 

+0

niemand? nichts? – Rickster

+0

Sie haben das falsche Tag verwendet. SWF steht für ShockWave Flash. Ich habe es repariert. – BalusC

Antwort

Verwandte Themen