h:messages does not display messages when p:commandButton is pressed
You're sending an ajax request with PrimeFaces <p:commandButton>
. Ajax requests have by default no form of feedback (unless PrimeFaces' autoUpdate="true"
is been used somewhere). You should be explicitly specifying parts of the view which you'd like to update on ajax response.
One way is specifying the update
attribute on <p:commandButton>
to point to the client ID of the <h:messages>
component.
<h:messages id="messages" ... />
<h:form>
<p:commandButton ... update=":messages" />
</h:form>
Another way is to replace it by PrimeFaces <p:messages>
which has an autoUpdate
attribute for the purpose of automatic update on ajax response.
<p:messages ... autoUpdate="true" />
<h:form>
<p:commandButton ... />
</h:form>
A completely different alternative is to turn off ajax by adding ajax="false"
attribute to the button, this way a synchronous postback will be performed which effectively results in a full page update, exactly like as how the standard JSF <h:commandButton>
behaves when used without <f:ajax>
.
<h:messages ... />
<h:form>
<p:commandButton ... ajax="false" />
</h:form>
See also:
hFonti
Updated on February 01, 2020Comments
-
hFonti about 4 years
I have a problem with the h:messages tag in JSF that simply does not show any messages. In the Glassfish log are no errors when I click the button. The setup is as follows:
test.xhtml:
<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" xmlns:j="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core"> <h:head> <title>test</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </h:head> <h:body> <h:messages globalOnly="true"/> <h:form id="loginform"> <p:commandButton id="testButton" value="Test" action="#{loginSessionBean.test()}" /> </h:form> </h:body> </html>
With The SessionScopedBean:
@ManagedBean @SessionScoped public class LoginSessionBean implements Serializable { private static final long serialVersionUID = 1L; ... public String test(){ FacesContext fc = FacesContext.getCurrentInstance(); fc.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Test!", null)); return ""; }