我的目标是将用户重定向到外部站点,并让他们回到我的站点,但保留特立尼达页面FlowScope。 这样,我可以在各个页面中进行一些处理和状态保存,将它们发送到外部站点进行一些外部处理,然后让它们返回到我的站点以完成处理。 从用户的角度来看,他们似乎正在执行一个连续的流程,并且可能在不同的浏览器选项卡中同时执行多个这些流程。
我尝试转换所有内容(除了状态未恢复之外工作正常(的方式是从我的流中的页面到外部站点发布帖子,然后外部站点在下一页中发布回我的网站。 这几乎就像一个断开连接的 ADF 任务流在单独的服务器上执行,然后返回到我的任务流中。
mysite.foo/faces/summary.jsf -> POST externalappserver.foo/faces/startexternal.jsf -> 另一个页面 -> POST myite/foo/faces/continue.jsf
我到处找过,发现了围绕javax.faces.ViewState的各种问题,但没有把它拉出来,把它交给一个外部站点,然后让一个外部网站在一段时间后把它发回一个不同的(甚至相同的(页面它最初来自哪里。
关于如何操纵状态以便我可以正确地会合回我的站点的任何想法?
我最终通过将特立尼达隐藏表单参数放在我传递给其他服务的回调 URL 上来解决这个问题。 因此,如果我的服务器/应用程序 http://localhost:7001/context/pageout.jsf 并且它使用回调 URL 发布到另一个站点,则回调 URL 现在是:
http://localhost:7001/context/pageout.jsf?_afPfm=234z345
这允许特立尼达与浏览器提供的JSESSIONID cookie一起恢复其页面流。 我不需要处理ViewState字段或任何其他会话问题。 我的页面流范围恢复了一切正常。