7

我正在开发JSF 2 Web 应用程序并使用从页面到页面的隐式导航来指定结果值和更改 url 值。我也有一些 Ajax 请求,以便能够在某些页面中进行更改,而无需提交所有内容。

例如,当我编辑用户的数据并保存更改时,我的问题就出现了。托管 Bean 保存用户数据并返回一个字符串以导航到用户列表。正确保存用户后,FacesMessage会在操作方法完成之前添加 a。

按钮

<p:commandButton value="#{msg.UPDATE}" action="#{manager.actionSave}"
            ajax="false" />

将代码写入方法

FacesContext.getCurrentInstance().addMessage(clientId, 
    new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg));

但是,即使我的<h:messages />主页中有一个标签,那里也没有显示任何内容。

4

1 回答 1

11

问题症状表明faces-redirect=true<redirect/>如果您仍在使用faces-config.xml.

Faces 消息是请求范围的,因此仅在当前请求所服务的资源中可用。通过重定向导航时,您基本上是在指示网络浏览器在给定的 URL 上创建一个全新的请求。面部消息在该请求中根本不可用。

如果重定向确实是强制性的,例如为了完成POST-Redirect-GET模式(这是一件好事),那么您需要将消息存储在 flash 范围内。你可以通过调用Flash#setKeepMessages()、传递来做到这一点true

context.addMessage(clientId, message);
context.getExternalContext().getFlash().setKeepMessages(true);

Note that this will fail if you're using a Mojarra version older than 2.1.14 and are redirecting to a resource in a different base folder. See also issue 2136.

于 2013-01-09T17:54:53.033 回答