2015-04-07 2 views
0

J'ai un bean d'application qui écoute le socket Web. Quand le message est reçu je voudrais mettre à jour le growl. Mais quelque chose comme ci-dessous ne fonctionne pas parce que ce n'est pas dans le temps de demande/réponse. C'est possible de faire ça?Mise à jour de p: growl de @ApplicationScoped bean écoute sur p: socket

RequestContext.getCurrentInstance().update("growl"); 
FacesContext context = FacesContext.getCurrentInstance(); 
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Message", "value")); 

Répondre

1

Ce que vous devez faire est d'envoyer un événement PrimeFaces pousser du grain à tous les clients attachés sur une websocket générale partagée par tous les clients. Dans ce cas, vous envoyez un message comme dans l'exemple PrimeFaces push notify

public void send() { 
    EventBus eventBus = EventBusFactory.getDefault().eventBus(); 
    eventBus.publish(CHANNEL, new FacesMessage(StringEscapeUtils.escapeHtml(summary), StringEscapeUtils.escapeHtml(detail))); 
} 

Et puis dans le spectacle de la page ce message

<p:growl widgetVar="growl" showDetail="true" /> 
<p:socket onMessage="handleMessage" channel="/notify" /> 

<script type="text/javascript"> 
    function handleMessage(facesmessage) { 
     facesmessage.severity = 'info'; 

     PF('growl').show([facesmessage]); 
    } 
</script> 
+0

Merci j'essaie, mais je ne reçois que 101 protocole de commutation du serveur. – Amsik

+0

Ensuite, essayez de trouver la cause de cela. Ça marche pour moi. Il est peut-être que CHANNEL n'est pas défini de vous ou autre chose .. – Kukeltje

+0

Il est intéressant parce que j'ai même erreur (101) même sur l'exemple de compteur et après un certain temps (quelques minutes) il a commencé à travailler. – Amsik