手动添加的面孔消息不会出现在手风琴面板的选项卡中

Manually added faces message doesn't appear in tab of accordion panel

我正在如下操作方法中添加面孔消息:

FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, "Mail invalide", "Vérifier le mail");
FacesContext.getCurrentInstance().addMessage("connection:mail", message);

我期待它出现在树中的以下位置:

<h:body>
    <p:layout fullPage="true">
        <p:layoutUnit position="center" >
            <p:accordionPanel multiple="true" activeIndex="0">
                <p:tab title="Se connecter" >
                    <h:form id="connection">
                        ...
                        <p:inputText id="mail" ... />
                        <p:message for="mail"></p:message>
                        ...
                        <p:commandButton value="OK" action="#{login.validateMailPaswword()}" ajax="false" />

但是,它没有出现在所需的位置。这是怎么造成的,我该如何解决?

addMessage() 中的客户端 ID 必须有效才能使消息显示在所需位置。您已经考虑到 <h:form> 是一个 NamingContainer,因此将其组件 ID 附加到子项的客户端 ID。但是,您忽略了 <p:accordionPanel> 也是这样一个(您应该通过查看生成的 HTML 输出并找出消息的客户端 ID 来发现它)。

所以,先给它一个固定的ID。例如

<p:accordionPanel id="tabs">

然后在生成的 HTML 输出中查找您在消息组件中引用的输入组件的生成 HTML 表示的客户端 ID。它看起来像这样:

<input type="text" id="tabs:connection:mail" ... />

因此,请在 addMessage() 中准确引用该 ID。

context.addMessage("tabs:connection:mail", message);