如何在重定向页面中显示面具信息

29

我已经提供了一个界面,允许用户为应用程序创建帐户。在注册过程结束时,注册方法执行注册过程并将成功消息添加到页面,然后将用户导航到显示系统所有用户的中央数据表。

我的问题是,由于页面重定向,成功消息永远不会显示。我不能在该方法中使用wait(),因为JSF消息直到该方法完成后才会显示。理想情况下,我希望先显示成功消息,然后在指定时间后重定向页面。

我该如何实现这个功能?

1个回答

61

保留消息闪存作用域中。它将在重定向后仍然存在。

context.addMessage(clientId, message);
externalContext.getFlash().setKeepMessages(true);
return "users.xhtml?faces-redirect=true";

请注意,较旧的Mojarra版本存在一些与Flash范围相关的奇怪错误。 你最好升级到至少Mojarra 2.1.27 / 2.2.5,以确保你的应用程序不受影响。

谢谢BalusC,我需要在新页面上调用一个消息更新吗?还是它们默认会在页面加载时触发? - tarka
不,重定向会创建一个同步请求,因此没有部分渲染的方法。它只是作为全新的GET请求进行呈现。所以你只需要有一个<h:message><h:messages>即可。 - BalusC
非常感谢。刚刚注意到我使用的是Majorra 2.1.6,所以我需要快速升级才能让它正常工作?2.1.14稳定版已经发布了吗? - tarka
只有当目标页面位于不同的基础文件夹中时才需要这样做。Mojarra当前已经更新到2.1.15版本。如果您无法升级,最好的选择是自己重新创建flash范围:1)生成一些唯一的ID。2)使用唯一的ID作为键将消息存储在会话范围内。3)将唯一的ID作为cookie值存储。4)在重定向页面的preRenderView事件中,检查是否存在cookie,如果存在,则将其用作会话属性键从会话中获取消息(并且不要忘记删除cookie和会话属性)。 - BalusC
非常好。它像魔法一样运行,将登出消息显示在欢迎页面上是一个有用的功能。已点赞。 - user2880020
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接