如何显示来自请求作用域bean的PostConstruct方法的FacesMessage



我想在用户第一次请求页面时显示错误消息。该错误是在请求范围的托管bean的后构造方法中设置的,如下所示:

@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!"

你能帮我吗?

我在使用MyFaces JSF 2.1的WebSphere 7上遇到了同样的问题。

WebSphere似乎过早地刷新了缓冲区,因此messages标记是在@PostConstruct方法完成之前呈现的。然而,我还没有找到一种方法来改变WebSphere的行为,方法是在托管bean中放置一个getter方法来返回一个空字符串,并使用h:ouputText标记来使用我现在有一个呈现消息的页面的值。

例如

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>

我解决了同样的问题,将消息放在bean的第一个声明之后,该声明将生成您想要显示的消息。所以在你上面的例子中,而不是这个:

**<h:messages />**
<h:form>
    <h:inputText value="#{myBean.name}" />
</h:form>

试着把它做成这样:

<h:form>
    <h:inputText value="#{myBean.name}" />
</h:form>
**<h:messages />**

点击此处查看BalusC的详细解释:如何在@PostConstruct 期间添加Faces消息

希望这能帮助

相关内容

  • 没有找到相关文章

最新更新