3 Replies Latest reply on Oct 6, 2008 7:35 PM by Scott Olcott

    FacesMessages lost when handling an exception

    Scott Olcott Newbie

      I am trying to handle some ConstraintViolationExceptions in the code so that I can provide a user friendly error message. After I add the FacesMessages I throw the exception again so that seam automatically rollsback the transaction.  The problem is that the FacesMessages that I added are not displayed on the page only the messages that was provided in pages.xml for the exception.  Am I doing something wrong? Have others experienced this and is this a bug in seam?  I am using the latest SNAPSHOT of 2.0.3

      Here is an example of what I am doing:

      Here is my action

      public String register() {
        }catch(ConstraintViolationException e){
            Map<String, String> violatedUniqueConstraints = (Map<String, String>)    theSession.createQuery("select new map(username as username, email as email) from User u " +
                      "where u.username = #{user.username} or u.email = #{user.email}").uniqueResult();
            if(violatedUniqueConstraints.containsKey("username") && violatedUniqueConstraints.get("username").equals(user.getUsername())){
              facesMessages.add("User with username #{user.username} already exists");
            if(violatedUniqueConstraints.containsKey("email") && violatedUniqueConstraints.get("email").equals(user.getEmail())){
              facesMessages.add("User with email #{user.email} already exists");
        //Rethrow the exception so the transaction is rolled back
        throw e;

      then in pages.xml if have the following so that it is redirected to the same page it was on

      <exception class="org.hibernate.exception.ConstraintViolationException">

      The interesting thing is that if I call


      before I rethrow the exception all messages are displayed correctly and the code in org.jboss.seam.web.ExceptionFilter.endWebRequestAfterException is also called which is what rolls back the transaction.