我在动作方法中添加了一条面部消息,如下所示:
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" />
但是,它没有出现在所需的位置。这是怎么造成的,我该如何解决?
答案 0 :(得分:4)
addMessage()
中的客户端ID必须有效才能让消息显示在所需位置。您已考虑<h:form>
是NamingContainer
,因此将其组件ID添加到子项的客户端ID。但是,您忽略了<p:accordionPanel>
也是这样的(您应该通过查看生成的HTML输出,同时找出消息的客户端ID)来发现它。
所以,首先给它一个固定的ID。 E.g。
<p:accordionPanel id="tabs">
然后在生成的HTML输出中查找您在消息组件中引用的输入组件的生成的HTML表示的客户端ID。它看起来像这样:
<input type="text" id="tabs:connection:mail" ... />
因此,请在addMessage()
。
context.addMessage("tabs:connection:mail", message);