bra*_*zzi 9 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";
Run Code Online (Sandbox Code Playgroud)
然后我将结果映射faces-config.xml并配置为
<navigation-case>
<from-outcome>some-outcome</from-outcome>
<to-view-id>/view.xhtml</to-view-id>
<redirect/>
</navigation-case>
Run Code Online (Sandbox Code Playgroud)
在view.xhtml我提出的信息:
<h:message globalsOnly="true" />
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用,因为执行重定向时消息会丢失.
我该如何解决?我发现这个惊人的帖子解释了如何使用a来做,PhaseListener但我相信这种情况太常见了,不能用这种方式来解决.我错了吗?我应该创建PhaseListener吗?或者是否有其他标准解决方案?
像往常一样来自BalusC的绝佳答案!
我只想添加,当我使用他的代码来设置keepMessages属性时,它没有为会话设置,而是仅针对此请求(尽管它在Javadocs中说明了).
我将以下代码放在header.xhtml中
<c:set target="#{flash}" property="keepMessages" value="true" />
现在它适用于每一页,我不必每次在支持bean中需要它时都设置它.你需要JSTL,不要忘记将以下内容放在你的xhtml标题中:
xmlns:c="http://java.sun.com/jsp/jstl/core"
JSF 2.2
进入豆子:
FacesContext facesContext = FacesContext.getCurrentInstance();
Flash flash = facesContext.getExternalContext().getFlash();
flash.setKeepMessages(true);
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "yourMessage", null));
return "namePage?faces-redirect=true";
Run Code Online (Sandbox Code Playgroud)
进入名称页面
改变
<h:message globalsOnly="true" />
Run Code Online (Sandbox Code Playgroud)
到
<h:messages globalsOnly="true" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11618 次 |
| 最近记录: |