我有一個servlet訪問的服務,它將用戶重定向到登錄屏幕。支持bean的作用域目前正在從@ConversationScoped更改爲@FlowScoped,因爲它更容易處理。可以從Servlet中啓動一個faces flow嗎?
有沒有一種方法可以直接從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>
這其中似乎執行得太早(在任何情況下)。
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>
我缺少什麼?
將前控制器設置爲流程沒有任何問題,但是,如果我正確讀取規範,則應該能夠直接引用流的第一個視圖;該規範說必要的'@ FlowScoped' bean必須在進入流中第一個節點時初始化 – kolossus
@kolossus感謝您的回覆,併爲延遲感到抱歉,我已休息了一段時間。我在規範中找到了你提到的參考,但是我仍然無法實現它。我總是得到一個'ContextNotActiveException' ... – NanSil