As you go to another view (i.e. you are redirected back to the registration view), Play performs the redirection, which means that the errors are no longer in scope, since the registration view is treated as a new request.
To get around this, you need to save validation messages for the next request, which is achieved using the validation.keep() function.
So, change your code, so just before you call signup() , you call validation.keep() .
Your code should look like
if(user != null) { Logger.warn("User account already created for email %s", email); validation.addError("email", "This email address already in use."); params.flash(); flash.error("Please correct the error below!"); validation.keep(); signup(); }
source share