Мы переместили всю форму в шаблон и полностью отрендерили ее в Ajax, например:
_myForm.gsp :
<div id="userForm">
<!-- You can even add error list: -->
<g:hasErrors bean="${user}">
<div class="errors">
<grid:renderErrors bean="${user}"/>
</div>
</g:hasErrors>
<g:form action="ajaxLogin">
Login: <g:textField name="login" type="text" value="${user.login}"
class="${hasErrors(bean: user, field: 'login', 'errors')}" />
<g:submitToRemote update="userForm" />
</g:form>
</div>
контроллер:
def ajaxLogin = {
User user = new User(params)
if (!user.save()) {
// validation errors get rendered here
render template: 'myForm', model: [user : user]
} else {
render template: 'nextStep', model: [user : user, whatever: whatever]
}
}
У пользователя сложилось впечатление, что форма осталась прежней.
Хотя для входа в систему я бы порекомендовал использовать плагин SpringSecurity и не повторять его.