2016-06-30 19 views
1

Auf einem einzigen xhtml, habe ich zwei Seiten (p: Seite). Jede Seite hat eine Form und in jeder Form ist ein Knurren definiert. Wenn ich auf der ersten Seite bin, wird das Knurren beim Klicken auf die Schaltfläche angezeigt. Wenn ich jedoch auf der zweiten Seite bin, wird das Knurren nicht angezeigt. Unten ist der reproduzierbare Beispielcode.Growl wird nicht auf der zweiten mobilen Seite angezeigt

Der Grund, warum ich nicht das update = "@ form" verwendet habe, ist, dass es ein anderes Formular in einem Overlay-Panel gibt und via @ (. ErrorHandlingPanel) Selector, ich sollte das Knurren leicht auslösen können, ohne es zu wissen auf welcher Seite ich gerade bin.

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:p="http://primefaces.org/ui" 
     xmlns:pm="http://primefaces.org/mobile" 
     xmlns:ui="http://java.sun.com/jsf/facelets"> 

<f:view renderKitId="PRIMEFACES_MOBILE"/> 

<h:head> 
</h:head> 

<h:body> 
    <pm:page id="first"> 
     <pm:header title="Page 1"></pm:header> 
     <pm:content> 
      <h:form id="form1"> 

       <ui:include src="error_handling.jspx"/> 

       <p:commandButton id="btn1" value="Save" actionListener="#{growlViewDev.saveMessage}" 
           update="@(.errorHandlingPanel)" 
           icon="check"/> 
      </h:form> 
     </pm:content> 
     <pm:footer> 
      <p:tabMenu> 
       <p:menuitem value="Page 1" 
         outcome="pm:first?transition=slide"/> 
       <p:menuitem value="Page 2" 
         outcome="pm:second?transition=slide"/> 
      </p:tabMenu> 
     </pm:footer> 
    </pm:page> 

    <pm:page id="second"> 
     <pm:header title="Page 2"></pm:header> 
     <pm:content> 
      <h:form id="form2"> 
       <ui:include src="error_handling.jspx"/> 

       <p:commandButton id="btn2" value="Save" actionListener="#{growlViewDev.saveMessage2}" 
           update="@(.errorHandlingPanel)" 
           icon="check"/> 
      </h:form> 
     </pm:content> 
     <pm:footer> 
      <p:tabMenu> 
       <p:menuitem value="Page 1" 
         outcome="pm:first?transition=slide"/> 
       <p:menuitem value="Page 2" 
         outcome="pm:second?transition=slide"/> 
      </p:tabMenu> 
     </pm:footer> 
    </pm:page> 
</h:body> 
</html> 

- error_handling.jspx

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:p="http://primefaces.org/ui" 
     > 
    <ui:composition> 
     <p:outputPanel styleClass="errorHandlingPanel"> 
      <p:growl showDetail="true" showSummary="true" escape="false" sticky="true" globalOnly="true"/> 
     </p:outputPanel> 
    </ui:composition> 
</html> 

- Managed Bean

@ManagedBean 
public class GrowlViewDev { 

    public void saveMessage() { 
     FacesContext context = FacesContext.getCurrentInstance(); 

     context.addMessage(null, new FacesMessage("Successful", "Your message: Button 1")); 
     context.addMessage(null, new FacesMessage("Second Message", "Additional Message Detail")); 
    } 

    public void saveMessage2() { 
     FacesContext context = FacesContext.getCurrentInstance(); 

     context.addMessage(null, new FacesMessage("Successful", "Your message: Button 2")); 
     context.addMessage(null, new FacesMessage("Second Message", "Additional Message Detail")); 
    } 
} 

Getestet mit 5.1, 5.2 und 5.3

Danke, ilhami Visne

Antwort

0

Irgendwie es scheint die s wie die Methode nach der Seitennavigation nicht aufgerufen wird. Die einzige Problemumgehung, die ich herausgefunden habe, ist das manuelle Anzeigen der Nachricht in der AJAX-Komponente oncomplete unter Verwendung der folgenden Methode:

<p:growl id="growl" widgetVar="growlWidgetVar"/> 

<p:commandButton outcome="pm:otherPage" update=":growl" oncomplete="showGrowl('growlWidgetVar');"/> 

/* 
* show current growl message again - PF-mobile bug on page navigation not showing it 
* 
* @param widgetVar PF widgetVar 
*/ 
function showGrowl(widgetVar) 
{ 
    PF(widgetVar).show(PF(widgetVar).cfg.msgs); 
}