【发布时间】:2015-01-16 13:55:19
【问题描述】:
我有一个服务,由一个 servlet 访问,它将用户重定向到登录屏幕。支持 bean 的范围目前正在从 @ConversationScoped 更改为 @FlowScoped,因为它更易于处理。
有没有一种方法可以直接从 servlet 中初始化一个面流,而不需要通过隐式操作或 JSF 转发/重定向进行间接初始化?
我知道@FlowScope 是一个 JSF (2.2) 范围,我想知道是否有办法例如扩展 FacesServlet 或类似的东西。
作为一种解决方法,我目前只是添加了一个带有按钮的视图,这使得 JSF 转发进入流目录,但我试图避免这种情况。
更新
我尝试了许多方法来“自动”转发到流中,而无需单击任何按钮,但我总是得到No active contexts for scope type javax.faces.flow.FlowScoped。这是我的方法:
-
f:viewAction<f:metadata> <f:viewAction action="myFlow" /> </f:metadata>这个似乎执行得太早了(无论如何)。
-
f:event<f:event type="preRenderView" listener="#{myBean.forwardToMyFlow()}" />bean 中的方法返回与
f:viewAction相同的结果。 -
导航案例
<navigation-rule> <from-view-id>/myView.xhtml</from-view-id> <navigation-case> <from-outcome>myFlow</from-outcome> <to-view-id>/myFlow/myFlow.xhtml</to-view-id> <redirect /> <to-flow-document-id /> </navigation-case> </navigation-rule>
我错过了什么?
【问题讨论】:
-
在流中使用前端控制器并没有错,但是,如果我正确阅读规范,您应该能够直接引用流的第一个视图;规范说必要的
@FlowScopedbean 必须在进入流中的第一个节点时进行初始化 -
@kolossus 感谢您的回复,抱歉耽搁了,我已经休息了一段时间。你提到的,我在规范中找到了参考,但我仍然无法让它工作。我总是收到
ContextNotActiveException...
标签: jsf-2.2 flow-scope