在我的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>
中。
如何指定邮件的显示位置?
答案 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:growl
与p: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>
关键是您应该只更新msg1
或msg2
,而不是两者都更新。在上面的示例中,如果您的按钮具有属性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"));