我正在使用域类的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>
不确定这是不是我应该去的方式,有什么建议吗?
答案 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插件而不是重复它。