需要验证的页面中js代码如下:
$("#inputForm").validate({ rules: { loginName: { required: true, remote: "user!checkLoginName.action?oldLoginName=" + encodeURIComponent('${loginName}') }, name: "required", password: { required: true, minlength:3 }, passwordConfirm: { equalTo:"#password" }, email:"email", checkedRoleIds:"required" }, messages: { loginName: { remote: "用户登录名已存在" }, passwordConfirm: { equalTo: "输入与上面相同的密码" } } });其中对loginName做的验证是看数据库中是否有重复的名称,使用的remote支持的是ajax提交,提交时会提交两个参数一个是loginName还有一个就是oldLoginName,之所以传递两个参数就是为了在修改的时候oldLoginName代表的是没有修改的原始值。hibernate也dao也提供了对这种查询的支持,代码如下:
/** * 判断对象的属性值在数据库内是否唯一. * * 在修改对象的情景下,如果属性新修改的值(value)等于属性原值(orgValue)则不作比较. * 传回orgValue的设计侧重于从页面上发出Ajax判断请求的场景. * 否则需要SS2里那种以对象ID作为第3个参数的isUnique函数. */ public boolean isPropertyUnique(String propertyName, Object newValue, Object orgValue) { if (newValue == null || newValue.equals(orgValue)) return true; Object object = findUniqueByProperty(propertyName, newValue); return (object == null); }函数返回true的时候证明数据库中没有重名的loginName,当返回的是false证明数据库中有重名的loginName