根据这个:http://java.net/jira/browse/JAVASERVERFACES-2136 flash-“scoped”消息应该能够在重定向到不同路径上的页面时存活。我想在我的应用程序中使用这样的东西,所以我下载了javax.faces-2.1。 14-20121003.074348-10来自这里的快照 https://maven.java.net/content/repositories/snapshots/org/glassfish/javax.faces/2.1.14-SNAPSHOT/进行测试。
我的情况是这样的:我在根目录中有一个页面(称为test.xhtml),在构造函数调用期间,在视图范围的辅助bean中进行检查并使用Omnifaces {{1}有条件地设置消息并使用Omnifaces Message.addFlashGlobalInfo
在根目录中重定向到index.xthml(感谢BalusC!)。在index.xhtml中我有一个Primefaces
Faces.Redirect()
我在其他页面中也使用了上面描述的相同“配置”,当重定向到名为bean方法的同一页面时,它可以正常工作。
所以不应该在不同的路径重定向中存在消息,还是我误解了这个问题?也许这里还有其他问题?
提前致谢! (我期待听到BalusC对这个btw的意见:))
答案 0 :(得分:3)
我刚刚用来调用一个设置消息和重定向的init方法但是再次没有消息出现!所以我不认为PostConstruct会工作..
确实,<f:event type="preRenderView">
设置Flash消息已经太晚了。当JSF当前处于渲染响应阶段时,无法创建闪存范围。您基本上需要在渲染响应阶段之前设置flash消息。尽管名称为preRenderView
,但此事件实际上是在(渲染响应阶段的最开始)期间触发的。
@PostConstruct
可以准时,只要在渲染响应期间调用了 。但是,这与<f:viewParam>
一起使用效果不佳。
要解决此问题,因为您已经在使用OmniFaces,只需使用<f:event type="postInvokeAction">
。
<f:metadata>
<f:viewParam name="some" value="#{bean.some}" />
<f:event type="postInvokeAction" listener="#{bean.init}" />
</f:metadata>