Spring WebFlow外部站点回调到动作状态或通过url触发特定事件

时间:2014-07-04 09:57:05

标签: jsf jsf-2 spring-webflow spring-webflow-2

Spring WebFlow 2外部站点回调到view-state,具有在callback-url中编码的特定webflow-event的触发器

您好,编码员!请阅读以下问题,并提供您的解决方案/实践/见解,感谢您的时间和知识。


定义

  • <view-state>通过标准触发外部重定向 html-formhttp post)。
  • 用户对外部应用程序执行某些操作
  • 使用_flowExecutionKey了解http-get外部网站回调 到同一个<view-state>
  • 继续发布说明

问题

来自外部应用程序用户的回归不应显示在<view-state>

中定义的视图

而不是在没有用户互动的情况下转换到action-state;

请求(回调)url参数可用。

如何使用spring webflow实现这一目标?可以使用程序化方法 - <view-state> <on-render> - 将流量转换为action-state的操作。

如果应采用其他技术解决此问题 - 请告知我们。


观测/限制

    url中的
  • _eventId=someEventId_eventId_someEventId不会触发spring-webflow事件
  • <on-render/>返回spring-webflow-Event不会触发转换
  • 在渲染页面上用于点击按钮的JavaScript不是优雅解决方案,但正在运行

与问题背景相关的工具/框架:

  • Spring WebFlow 2
  • JSF 2.1

用于讨论的

网络流量定义样本片段

<view-state
    id="redirectToExternalSiteAndComeBack"
    view="/someViewToRedirectToExternalSite.xhtml"
    redirect="true">
    <on-entry/> <!-- for illustration only, does nothing -->
    <on-render/><!-- for illustration only, does nothing -->
    <transition on="handleExternalSiteCallback" to="handleCallBack"/>
    <!-- Trigerred on button,link click -->
</view-state>

1 个答案:

答案 0 :(得分:2)

来自视图状态的转换确实需要用户交互,但有一种方法可以实现您想要的效果。

假设您的用例是 - 在Web流程中的某个时刻让我们说e1s7您要转到外部站点,您可以使用externalRedirect执行此操作,然后返回到流并执行某些操作。假设外部网站是一个银行,需要一个回调网址才能将用户带回您的网站。以下是bankUrl底部的xml片段的外观

bankUrl = https://somebank.com?callback=${callback}
${callback} = https://yoursite.com/flowPath?execution=e1s7&_eventId=process (do encode this!)

可以使用#{flowExecutionContext.key.toString()}

之类的东西来引用流执行密钥
<view-state id="redirectToBank" view="externalRedirect:${bankUrl}>
    <transition on="process" to="process">
</view-state>

<action-state id="process">
    ...do something...
</action-state>

希望有所帮助。