【问题标题】:Primefaces : how to use growl for notifications without user interactionPrimefaces:如何在没有用户交互的情况下使用咆哮通知
【发布时间】:2012-06-20 08:54:20
【问题描述】:

我对 JSF/Primefaces 还很陌生,所以也许我把问题弄错了,而且我在论坛上搜索了很多次都没有运气。

我最大限度地简化了问题,并使用了 Damian 的 @PostConstruct

所以要恢复,我希望在加载 test.xhtml 后,我的咆哮通知会弹出 - 即没有用户交互...而且它没有出现,但是,当您单击保存按钮时会发生这种情况。

它确实通过了 sayHi() 但此时似乎并不知道容器。

WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.

目的是在数据库访问失败时显示用户友好的通知并发出咆哮声。

我认为我一定遗漏了一些基本原则:(

test.xhtml

    <h:form id="form">

        <p:growl id="growl" showDetail="true" showSummary="true" sticky="true" />  

        <h:outputLabel value="#{testGrowl.message}" />

        <p:commandButton value="Save" actionListener="#{testGrowl.save}" update="growl" />  
    </h:form>

TestGrowl.java

@ManagedBean
public class TestGrowl {
private String message;

public TestGrowl()
{
    //sayHi(); commented to try with @PostConstruct
    message = "we've been in the TestGrowl constructor";
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public void save(ActionEvent actionEvent) {  
    sayHi();
}  

@PostConstruct
private void sayHi(){
    FacesContext context = FacesContext.getCurrentInstance(); 
    context.addMessage(null, new FacesMessage("Successful", "Hello "));  
}
}

非常感谢

【问题讨论】:

  • 您能指定您使用的 JSF 版本吗? @ManagedBean 自 2.2 起已弃用,您应该结合使用 @Named (javax.inject.Named) 和 javax.enterprise.context.*Scoped。并不是说这会解决您的问题,这只是我立即注意到的一件小事。 编辑:哦,6 岁的帖子。可能是

标签: ajax jsf-2 primefaces


【解决方案1】:

这是可能的。当消息添加到bean的构造函数、@PostConstruct或preRenderView监听器时,它会自动显示在页面上,您不必使用任何“onload”事件。 您的代码的问题是您没有正确发送消息。你应该这样做:

FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "test", "test");  
FacesContext.getCurrentInstance().addMessage(null, msg);  

addMessage 的第一个参数是发生错误的组件的 ID,如果是全局错误,则为 null。 此外,如果在您的咆哮中您只想显示全局消息,并且您希望仅使用 p:message 为每个组件显示特定于组件的错误消息,您应该在咆哮中添加globalOnly="true"

【讨论】:

  • 嗨,Damian,我也尝试过使用 null,但即使使用 globalOnly="true",它也会继续对这些 FacesMessage 进行排队。这个想法实际上是有一个“咆哮”作为一般通知,以及一个带有sticky="true" 的“咆哮错误”用于更严重的错误。但是,当我添加一个具有&lt;p:ajax event="change" update="growl"&gt;&lt;p:selectOneMenu&gt; 时,当我选择一个项目时,它会显示已排队的咆哮消息,这就是为什么我想知道是否有一种方法可以在没有用户输入的情况下显示它们。
  • @Qualaelay 当消息不起作用时,您在哪里发送消息?在@PostConstruct? bean的范围是什么?您使用的是什么版本的 primefaces?
  • 我使用的是 PF 3.2,而不是使用 @PostConstruct(实际上从未听说过它来自 SE,在我的 bean 构造函数中,我直接调用了我的 init 函数)。我删除了错误的概念,只在调用 init 方法时显示咆哮消息,我提供了上面的文件:/
  • 尝试在fillInFilteredList()方法中加入@PostConstruct注解,并去掉构造函数中对该方法的调用(bean构造完成后会自动调用)。
  • 我用您的@PostConstruct 编辑了最初的帖子,但仍然无法正常工作 - 我也将问题简化到了最大:(
猜你喜欢
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 2016-03-08
相关资源
最近更新 更多