如何在xhtml页面上显示多个<h:message>,显示不同的内容</h:message>

时间:2013-12-16 21:37:31

标签: java ajax validation jsf message

如何在一个页面中显示不同内容的多个<h:message>标记?

我正在验证inputtext,如下所示:

Title: <h:inputText id="input"
            value="#{insertDocController.docController.documentBean.title}"
            required="true" requiredMessage="Required!">
            <f:ajax  execute="@this" render="message" event="blur" />
            </h:inputText>         
            <h:message for="input" id="message" style="color:red" />

此页面旨在提交有关文档的一些信息。在我提交每个文档后,我想显示一条确认消息,提交按钮的代码是:

 <h:commandButton id="submit" value="insert" action="#{insertDocController.submit}" />
             <h:messages id="submitMessage" />

submitMessage方法生成submit()

public void submit() throws IOException {   
        String fileName = FilenameUtils.getName(uploadedFile.getName());
        String contentType = uploadedFile.getContentType();
        byte[] bytes = uploadedFile.getBytes();

        FacesContext.getCurrentInstance().addMessage("submitMessage", 
            new FacesMessage(String.format("File '%s' type '%s' successfully " +
                    "submitted!", fileName, contentType)));

        this.docController.submit();
}

当我对其进行测试时,将inputtext留空并点击submit button,该页面会在标题inputtext旁边显示一条红色消息,并在提交按钮旁边显示黑色消息,但两者都显示相同的内容:&#34;必需!&#34;

在这个链接上:How do I use multiple h:messages or p:messages on one page?他们谈论类似的问题,但是使用来自primefaces的<p:message>。他们说解决方案是将属性redisplay<p:message>设置为true。 <h:message>没有此属性。来自<h:message>的重新显示有<p:message>的任何属性吗?

解决方案是什么?

谢谢!

1 个答案:

答案 0 :(得分:5)

您需要将globalOnly="true"添加到h:messages

<h:messages id="submitMessage" globalOnly="true" />

当您创建提交消息时,将clientId设置为null

FacesContext.getCurrentInstance().addMessage(null, 
        new FacesMessage(String.format("File '%s' type '%s' successfully " +
                "submitted!", fileName, contentType)));