java - 在通过 <h :message> in JSF 进行展示重定向后保留 FacesMessage

标签 java jsf redirect jsf-2

<分区>

我有一个我认为是常见的问题:一些托管 bean 有一个将一些消息添加到上下文的操作:

FacesMessage fm = new FacesMessage("didn't work");
fm.setSeverity(FacesMessage.SEVERITY_ERROR);
FacesContext.getCurrentInstance().addMessage(null, fm);
return "some-outcome";

然后我将结果映射到 faces-config.xml 并将其配置为

<navigation-case>
    <from-outcome>some-outcome</from-outcome>
    <to-view-id>/view.xhtml</to-view-id>
    <redirect/>
</navigation-case>

view.xhtml 中,我显示消息:

<h:message globalsOnly="true" />

但是,它不起作用,因为在执行重定向时消息丢失了。

我该如何解决?我找到了这个 amazing post解释如何使用 PhaseListener 来做到这一点,但我相信这种情况太常见了,必须以这种方式解决。我错了吗?我应该创建 PhaseListener 吗?还是有其他一些标准解决方案?

最佳答案

BalusC 一如既往的出色回答!

我只是想补充一点,当我使用他的代码设置 keepMessages 属性时,它不是为 session 设置的,而只是为这个请求设置的(尽管它在 Javadocs 中是这么说的)。

我将以下代码放在我的 header.xhtml 中 <c:set target="#{flash}" property="keepMessages" value="true" />

现在它适用于每个页面,而无需每次在支持 bean 中需要时都进行设置。 为此,您需要 JSTL,并且不要忘记将以下内容放入您的 xhtml header 中: xmlns:c="http://java.sun.com/jsp/jstl/core"

关于java - 在通过 <h :message> in JSF 进行展示重定向后保留 FacesMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5137601/

相关文章:

Java-如何使用 java printf 打印空日期的空白

java - 从属性中删除元素

java - 浏览器后退按钮如何处理自动 URL 重定向?

regex - 我一直在尝试将特定路径中的所有 url 重定向为小写

java - 当字符串以 Z 结尾时将字符串转换为日期格式

Java 线程对象锁

java - 如何在 Netbeans 中从 Maven 安装 PrimeFaces?我收到警告,标签库 http ://primefaces. org/ui 不存在

jsf - 上传的图片仅在刷新页面后可用

java - ICEFaces AJAX 重定向到 404

linux - 巴什脚本 : Integrated document creation hangs