Primefaces growl is not working in all the pages

jsf, primefaces

Solution

If a parent of the with the UICommand button is been rendered/updated by an ajax request beforehand, then the first action will always fail. The second and subsequent actions will work. This is caused by a bug in view state handling which is reported as JSF spec issue 790 and fixed in JSF 2.2. For JSF 2.0 and 2.1 you need to explicitly specify the ID of the in the render of the `<f:ajax>`

Says BalusC here. So in your case you are doing navigation to another page and stucks into that view state bug, `ajax=false` indicates submit the button without AJAX that's why it works.

Also BalusC suggests to use a script which fixes this bug here.

Problem

My web has a common template i.e. `xhtml file` while contains `growl` ``` <p:growl id="message" showDetail="true" life="3000" /> ``` This template is used further in all pages. I noticed that `growl` is working for page `index.xhtml` but not working in rest of the pages. Below is the snippet of `faces-config.xml` file- ``` <navigation-rule> <display-name>index.xhtml</display-name> <from-view-id>/index.xhtml</from-view-id> <navigation-case> <from-outcome>NORMAL_USER</from-outcome> <to-view-id>/home.xhtml</to-view-id> </navigation-case> </navigation-rule> ``` But whenever I am accessing the page `home.xhtml` via link `http://localhost:8080/portal/home.xhtml`, `growl` starts working. In all the pages I am using `update=":message"` to update `growl`. Which is the culprit? Below is `index.xhtml` ``` <ui:composition template="/template/common/base.xhtml" xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <ui:define name="center"> <h:form> <div align="center" style="margin-top: 10%; margin-bottom: 10%;"> <p:panelGrid columns="2"> <f:facet name="header"> #{msg.HEADER} </f:facet> <h:outputLabel for="username" value="#{msg.USERNAME}" /> <p:inputText id="username" value="#{client.user.username}" required="true" requiredMessage="#{msg.USERNAME_REQUIRED_MSG}" /> <h:outputLabel for="password" value="#{msg.PASSWORD} " /> <p:password id="password" value="#{client.user.password}" required="true" requiredMessage="#{msg.PASSWORD_REQUIRED_MSG}" /> <f:facet name="footer"> <div align="right"> <p:commandButton value="#{msg.LOGIN_BUTTON}" icon="ui-icon-check" update=":message" action="#{client.login}" /> </div> </f:facet> </p:panelGrid> </div> </h:form> </ui:define> </ui:composition> ``` Below is `base.xhtml` ``` <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui"> <h:head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>My Web Portal</title> <h:outputStylesheet library="css" name="default.css" /> </h:head> <h:body> <p:growl id="message" showDetail="true" life="3000" /> <h:link outcome="index" style="text-decoration: none;"> <div id="header" style="margin: 2px; width: 100%; text-align: center;"> <p:panel> <h:outputText value="My Web Portal" style="font-size: 20px; " /> </p:panel> </div> </h:link> <div id="middle" style="margin: auto; width: 80%;"> <ui:insert name="center"></ui:insert> </div> <div id="footer" style="clear: both; text-align: center; margin: 2px; width: 100%;"> <p:panel header="2013 All rights reserved. Designed by Ravi Joshi"> <h:link value="Home" outcome="index" /> <p:spacer width="10px;" /> <h:link value="About Us" outcome="index" /> <p:spacer width="10px;" /> </p:panel> </div> </h:body> </html> ``` The next page `home.xhtml` is also using `base.xhtml` in the same way as `index.xhtml` is using it... Below is the snippet of it- ``` <ui:composition template="/template/common/base.xhtml" xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <ui:define name="center"> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> </ui:define> </ui:composition> ```

Original source

Related problems