Nan*_*Sil 2 jsf-2.2 flow-scope
我有一个服务,由servlet访问,它将用户重定向到登录屏幕.支持bean的范围目前正从@ConversationScoped更改为@FlowScoped,因为它更容易处理.
有没有办法直接从servlet中初始化faces流,没有通过隐式动作或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>
Run Code Online (Sandbox Code Playgroud)
这个似乎执行得太早(无论如何).
f:event
<f:event type="preRenderView" listener="#{myBean.forwardToMyFlow()}" />
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)我错过了什么?
我终于找到了一个解决方案,在阅读规格并摆弄流量之后!
我有一个页面,我只是:
<f:metadata>
<f:viewAction action="#{bean.initFlow}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,但诀窍在于方法,你必须通过执行以下操作"手动"初始化所需的流程:
public String initFlow(){
FacesContext context = FacesContext.getCurrentInstance();
FlowHandler handler = context.getApplication().getFlowHandler();
handler.transition(context, null, handler.getFlow(context, "", "flow-name"), null, "");
return "flow-name";
}
Run Code Online (Sandbox Code Playgroud)
该transition方法"激活"命名流并使其可用,以便您可以转发到流的入口点.
请注意,即使它看起来像一个正常的前锋,也viewAction总是会重定向!
| 归档时间: |
|
| 查看次数: |
643 次 |
| 最近记录: |