我想在用户第一次请求页面时显示错误消息。该错误在请求范围的托管bean的post构造方法中设置,如下所示:
@RequestScoped
public class MyBean {
private String name;
@PostConstruct
public void init() {
// some validations here
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "You have no credit!");
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, message);
context.renderResponse();
}
public String getName() {
return name;
}
}
然后在我的JSF页面中:
<!-- I'm expecting the error you have no credit will be displayed here -->
<h:messages />
<h:form>
<h:inputText value="#{myBean.name}" />
</h:form>
在开发阶段运行时,JSF抱怨这是一条未处理的消息:
"Project Stage[Development]: Unhandled Messages - You have no credit!"
你能帮助我吗?
答案 0 :(得分:2)
我在使用MyFaces JSF 2.1的WebSphere 7上遇到了同样的问题。
似乎WebSphere过早地刷新缓冲区,因此在@PostConstruct方法完成之前呈现messages标记。我还没有找到改变WebSphere行为的方法,但是通过在托管bean中放置一个getter-method来返回一个空字符串并使用ah:ouputText标签来使用我现在有一个呈现我的消息的页面的值。
e.g。
BackingBean.class
@ManagedBean
@RequestScopped
public class BackingBean {
public String getEmptyString { return ""; }
}
BackingBean.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head></h:head>
<body>
<h:outputText value="#{backingBean.emptyString"/>
...
</body>
</html>
答案 1 :(得分:2)
我通过在第一次声明bean之后放置消息来解决同样的问题,该bean预期会产生您想要显示的消息。所以在上面的例子中,而不是这个:
**<h:messages />**
<h:form>
<h:inputText value="#{myBean.name}" />
</h:form>
尝试这样做:
<h:form>
<h:inputText value="#{myBean.name}" />
</h:form>
**<h:messages />**
在此处查看BalusC的更详细说明: How can I add Faces Messages during @PostConstruct
希望这有帮助