我对 org.omnifaces.util.Faces#redirect 和对话范围 bean 有疑问:
有一个按钮
<p:commandButton action="#{navigationHandler.gotoCreateCar}"
actionListener="#{createHandler.init(searchHandler.search())}
value="#{msg.search}" update=":articleSearchForm">
<f:param name="cid" value="#{javax.enterprise.context.conversation.id}"/>
</p:commandButton>
在我的对话范围 bean 初始化之后,它必须在同一对话范围内导航到 createCar 页面:createHandler。
在 NavigationHandler#gotoCreateCar 中只是调用 Faces.redirect(createCarPage)。
如果我这样做,参数 cid 不会被传输,我会失去对话。
如果我在 faces-config.xml 中定义导航规则:
<navigation-case>
<from-outcome>createCar</from-outcome>
<to-view-id>/portal/createCar.xhtml</to-view-id>
<redirect />
</navigation-case>
并在 NavigationHandler#gotoCreateCar 中返回所需的结果 - 然后它工作正常。
也许我不了解这两种导航方法之间差异的每一个细节。如果有人可以帮助我理解问题,我将不胜感激。
谢谢!