输入验证后发送警报而不重新加载页面

时间:2011-07-17 19:04:07

标签: ajax grails

我正在使用域类的grails验证来验证表单的输入。我可以在有效和无效输入之间区分,但我无法解决的问题是我想在页面上显示丢失/无效输入而不重新加载它。

我想使用submitToRemote,如示例所示:

<g:form action="show">
        Login: <input name="login" type="text"></input>
        <g:submitToRemote update="updateMe" />
</g:form>
<div id="updateMe">this div is updated by the form</div>

不确定这是不是我应该去的方式,有什么建议吗?

3 个答案:

答案 0 :(得分:0)

您可以使用submitToRemote元素的before参数来调用Javascript方法,该方法以异步方式执行验证(并使用任何错误更新页面)。我认为如果有任何错误,该方法需要返回false,否则返回true。

答案 1 :(得分:0)

你可以在javascript中附加一个动作,看起来像这样(如果你使用jQuery):

$('#id_of_form').submit(function() {

   var login = $('input[name="login"]').val()
   if(login.length == 0) {
         // Show some error, about an empty login
         $('#updateMe').text('Empty login is not allowed')
         return false; // will prevent submitting the form
   }

   return true; // Will allow submitting the form 
})

未经测试,但应该有效。

答案 2 :(得分:0)

我们将所有表单移动到模板并在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插件而不是重复它。