2

据此: 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 设置消息Message.addFlashGlobalInfo并重定向到 index.xthml也在根目录中使用 Omnifaces Faces.Redirect()(感谢 BalusC!)。在 index.xhtml 我有一个 Primefaces

<p:messages id="msg" showDetail="false" autoUpdate="true" />

我在其他页面中也使用了上述相同的“配置”,当重定向到称为 bean 方法的同一页面时,它工作正常。

那么消息不应该在不同的路径重定向中幸存下来还是我误解了这个问题?也许这里还有其他问题?

提前致谢!(我期待听到 BalusC 对此的意见 :))

4

1 回答 1

3

我只是用来调用一个确实设置消息和重定向的init方法,但再次没有消息出现!所以我认为 PostConstruct 也不会起作用..

确实,<f:event type="preRenderView">设置快讯为时已晚。当 JSF 当前处于渲染响应阶段时,无法创建 flash 范围。您基本上需要在渲染响应阶段之前设置 flash 消息。尽管 name 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>

也可以看看:

于 2012-10-04T15:02:15.690 回答