Search code examples
jsfprimefacesmessagemanaged-bean

Show faces message below input fields


I am working with JSF (PrimeFaces)/EJB/JPA and a MySQL database. What I want to do is to show AT THE TOP OF THE XHTML BODY "User was successfully added to database" info message when an user is introduced successfully in the DB. I know I can use h:messages but then, also the validation error messages `are shown at the top of the body, and I want the error messages to be shown below the input fields. How could I do this?

Facelet code

 <h:body>
<h:messages  errorStyle="color: red" infoStyle="color: green" layout="table"/>`<!--WRONG-->

    <p:inputText id="name" required="true" value="#{usersManagedBean.username}" requiredMessage="requiered field">              
              <f:validator validatorId="validators.NameValidator"/>
    </p:inputText>
    <p:watermark for="name" value="User" />
    <p:message for="name" />


    <p:inputText id="age" required="true" value="#{usersManagedBean.username}" requiredMessage="requiered field">              
              <f:validator validatorId="validators.AgeValidator"/>
    </p:inputText>
    <p:watermark for="age" value="Age" />
    <p:message for="age" />


    <p:commandButton value="Save user" action="#{usersManagedBean.saveUser}" ajax="false" />

    </h:body>

Managed Bean code

//imports

@Named(value = "usersManagedBean")
@SessionScoped
public class UsersManagedBean implements Serializable 
{

String username;
int  userage;

@PostConstruct
    public void init()
    {
        username="";
    userage=0;
    }

//Getters and Setters

public void saveUser()
{
    User eUser = new Users();

    eUser.setName(username);
    eUser.setAge(userage);

    ejbUsersDAO.create(eUser); //DAO
    addSuccessMessage("User was successfully added to database");

}

 public static void addSuccessMessage(String msg) 
{
        FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg);
        FacesContext fc = FacesContext.getCurrentInstance();
        fc.addMessage("successInfo", facesMsg);
}

}

Solution

  • Try setting globalOnly="true" attribute in your <h:messages> and change your addSuccessMessage to

    fc.addMessage(null, facesMsg);