如何指定消息是否应显示在p:growl或p:messages中?

时间:2012-05-16 20:19:41

标签: jsf-2 primefaces messages

在我的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>中。

如何指定邮件的显示位置?

5 个答案:

答案 0 :(得分:15)

从primefaces手册中提取。第282页。

可定位的消息

有时您可能需要将一条或多条消息定位到特定消息 例如,假设您在同一页面上有咆哮和消息,您需要这样做 在growl上显示一些消息,在消息上显示一些消息。用于属性以关联消息 具体的组成部分。

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

The Bean

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

在上面的示例中,消息将显示第一个和第二个消息,而growl将仅显示 第3条消息。

答案 1 :(得分:14)

由于p:messages只是h:messages的扩展名,而p:growl实际上与h:messages完全相同,所以您不能。{您可以做的是在向p:growl添加消息后不更新context(可能您在某些“确认”commandButton中执行此操作)然后它根本不会显示,但是您无法指定仅显示某些消息。更好的解决方案是不要将p:growlp:messages混合使用,只使用一个。

您正在寻找的功能将在新的 Primefaces 3.3 Targetable messages

中提供

答案 2 :(得分:2)

由于您已为<p:growl><p:messages>分配了2个不同的ID,我认为您可以尝试以下内容:

<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>上。

答案 3 :(得分:1)

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

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

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

答案 4 :(得分: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"));