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

Luc*_*ane 2 java validation ajax 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" />
Run Code Online (Sandbox Code Playgroud)

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

 <h:commandButton id="submit" value="insert" action="#{insertDocController.submit}" />
             <h:messages id="submitMessage" />
Run Code Online (Sandbox Code Playgroud)

并且在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();
}
Run Code Online (Sandbox Code Playgroud)

当我测试它,inputtext留空并点击时submit button,页面会在inputtext标题旁边显示一条红色信息,在提交按钮旁边显示一条黑色信息,但两者都显示相同的内容:"必填!"

在此链接上:如何在一个页面上使用多个h:messages或p:消息?他们谈论类似的问题,但是<p:message>来自主要问题.他们说,解决的办法是设置该属性redisplay<p:message>设置为true.<h:message>没有这个属性.是否有<h:message>来自redisplay的类似属性<p:message>

那是什么解决方案?

谢谢!

Hat*_*mam 5

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

<h:messages id="submitMessage" globalOnly="true" />
Run Code Online (Sandbox Code Playgroud)

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

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