当用户注册新帐户时,应用会发送确认电子邮件。该电子邮件包含一个链接,该链接必须为具有多个事件的流启动特定的eventId。链接重定向正确到流,但我没有在确认eventId上获得此流程启动,始终在第一个eventId上启动,称为登录。
url: .... aio / spring / login?_eventId =确认& code = cmFmYWVscnVpenRhYmFyZXNAZ21haWwuY29t
我已经阅读了使用externalRedirect和其他命令编写流程规则的可能解决方案,但我不需要那样。
登录流程
<view-state id="login" view="login.xhtml">
<transition on="entry" to="connect"/>
<transition on="recoveryPass" to="recovery" />
</view-state>
<action-state id="connect">
<evaluate expression="login.connect()" />
<transition on="yes" to="finish" />
<transition on="no" to="login" />
</action-state>
<view-state id="recovery" view="recovery.xhtml" model="loginFields">
<transition on="return" to="login" />
<transition on="sendPass" to="recoveryPass" />
</view-state>
<action-state id="recoveryPass">
<evaluate expression="login.recoveryPass()" />
<transition on="yes" to="login" />
<transition on="error" to="error" />
</action-state>
<action-state id="confirmation">
<on-entry>
<set name="confirmationCode" value="requestParameters.code" type="string" />
</on-entry>
<evaluate expression="login.confirmation(confirmationCode)" />
<transition on="yes" to="confirmationOk" />
<transition on="no" to="noUserFound" />
<transition on="error" to="error" />
</action-state>
<view-state id="confirmationOk" view="confirmation.xhtml">
<!--<set name="viewScope.code" value="found" /> -->
</view-state>
<view-state id="noUserFound" view="confirmation.xhtml">
<!--<set name="viewScope.code" value="notFound" />-->
</view-state>
<end-state id="finish" />
<subflow-state id="error" subflow="error">
</subflow-state>
答案 0 :(得分:2)
eventId与state id不同 - 在正在进行的流的当前状态(操作/视图)中转换所需的eventId,而不是用于启动新流。您登录登录的原因可能是login-flow xml可能映射到/ login映射,而view login状态是id登录是登录流程的开始状态(默认情况下,流定义文件中的第一个状态将是启动状态) 。您需要将启动状态的决策状态重定向到基于某些条件参数的状态,无论您是否需要进入登录状态或确认状态。
修改强>
例如,如果代码参数仅在来自电子邮件的请求时出现,那么您的流程定义可能如下:
<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="code" type="java.lang.String">
<decision-state id="checkFlowStart">
<if test="code == null" then="login" else="confirmation"/>
</decision-state>
<view-state id="login" view="login.xhtml">
<transition on="entry" to="connect"/>
<transition on="recoveryPass" to="recovery" />
</view-state>
....
答案 1 :(得分:0)
您是否考虑将特定状态(在该状态下实施)作为不同的流程。在主流程中使用时,它可以用作子流程,而它也可以自由地作为单独的流程启动。 来自主流的参数可以作为输入传递给子流。以下是我试图解释自己的一个例子
Main Flow
<view-state></view-state>
<action-state></action-state>
<!-- This is the re-usable flow which can be used within this flow and can be
launched independently -->
<sub-flow>
<input/>
</sub-flow>
Another spring flow - can be plugged in from another flow or used independently
<input/>
<action-state></action-state>
<end-state></end-state>