5

在我的 Facelets 页面中,我有这个:

<p:growl id="msg1" life="1500"/>

和另一个

<p:messages id="msg2"/>

我只需要显示以下消息<p:messages>

FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("veillez saisir les champs obligatoires (*)", null));

但它也出现在<p:growl>.

如何指定消息的显示位置?

4

5 回答 5

16

摘自 primefaces 手册。第 282 页。

可定位的消息

有时您可能需要将一条或多条消息定位到特定消息组件,例如,假设您在同一页面上有咆哮和消息,并且您需要在咆哮和消息中显示一些消息。用于属性将消息与特定组件相关联。

<p:messages for="somekey" />
<p:growl for="anotherkey" />

豆子

FacesContext context = FacesContext.getCurrentInstance();
context.addMessage("somekey", facesMessage1);
context.addMessage("somekey", facesMessage2);
context.addMessage("anotherkey", facesMessage3);

在上面的示例中,消息将显示第一条和第二条消息,而咆哮将只显示第三条消息。

于 2013-03-26T13:30:26.070 回答
14

因为p:messages只是扩展,h:messages实际上p:growlh:messages你不能做的事情。您可以做的是p:growl在添加消息后不更新context(可能您在某些“确认”中这样做commandButton)然后它根本不会显示,但您不能指定只显示一些消息。更好的解决方案是不要混合p:growlp:messages只使用一种。

您正在寻找的功能将在新的Primefaces 3.3 Targetable 消息中提供

于 2012-05-16T20:51:29.927 回答
2

由于您已经为 and 分配了 2 个不同的 ID <p:growl><p:messages>我认为您可以尝试以下操作:

<div id="aDiv">

    ### Use the following button to update only <p:growl id="msg1"> ###
    <p:commandButton actionListener="#{mrBean.doSomething}" update="msg1" />

    ### Use the following button to update only <p:messages id="msg2"> ###
    <p:commandButton actionListener="#{mrBean.doSomethingElse}" update="msg2" />

</div>

关键是你应该只更新一个msg1msg2,而不是两个。在上面的示例中,如果您的按钮具有属性update="aDiv",则您的消息将同时显示在<p:growl>和上<p:messages>

于 2012-05-17T11:56:21.357 回答
1

您可以使用 p:growl 的“严重性”属性来指定您希望仅在 Growl 中显示的消息类型。

<p:growl id="messages" severity="info, warn, error, fatal" showDetail="true" life="5200" autoUpdate="true" />

现在,如果您不想将 Growl 用于信息消息,那么只需删除“信息”参数,然后您可以使用 p:message 或您自己选择的任何文本并相应地设置样式<p:outputLabel value="A Validation error occured!" rendered="#{facesContext.validationFailed}" /> 所以这样您就可以根据 Growl 和消息使用到你的选择。

于 2015-06-29T07:40:00.863 回答
0

很简单,这里是 JSF + PrimeFaces 5.2 中的一个例子

<p:messages for ="Message1" showDetail="true" autoUpdate="true" closable="true" />

<p:messages for ="Message2" showDetail="true" autoUpdate="true" closable="true" />
FacesContext.getCurrentInstance().addMessage("Message1", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error!", "Hello 1"));
FacesContext.getCurrentInstance().addMessage("Message2", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error!", "Hello 2"));
于 2015-05-10T14:32:27.963 回答