由于新增和修改都使用的同一个方法,而且修改时,默认的角色名不能提示“角色名已存在”,所以需要得到修改时,它原来的角色名和修改后的角色名,得到原来的角色名用了很久,最后的方法是:在jsp页面中,添加一行隐藏的,用来保存原来的角色名,然后在弹窗的时候,给它赋值。
jsp页面添加一行隐藏:
<tr>
<td align="right"><label for="roleName" class="isNotNull">角色名称:</label></td>
<td align="left"><input type="text" id="roleName" name="roleName" />
<input type="hidden" id="oldRoleName" name="oldRoleName"/>
</td>
</tr>
给弹窗中赋值:
function toEditRole() {
var rowData = fnGetSelectedRowData(oTable);//得到选中的待修改的整行的数据
$("#editRole #roleName").val(rowData.roleName);
$("#editRole #oldRoleName").val(rowData.roleName);
}
验证方法:
//验证角色名是否重复
jQuery.validator.addMethod("checkRoleNameRepetition", function(value,element){
var resourceNo = '';
var oldRoleName = $("#editRole #oldRoleName").val();//原来的默认角色名
if(oldRoleName){//如果默认角色名存在,说明是修改操作(新增时默认角色名为null)
if(oldRoleName==value){//如果默认角色名和修改后的一样,说明没有修改,直接返回true,即不需要验证
return true;
}
resourceNo = $("#editRole #resourceNo").val();//修改操作,得到修改框中的resourceNo
}else{
resourceNo = $("#createRole #resourceNo").val();//如果默认角色名不存在,说明是新增操作,则得到新增框中用户输入的resourceNo
if(resourceNo==''){//如果resourceNo(公司资源号)为空,说明没有输入公司名称,则不继续验证
return true;
}
}
return checkRepetition(Root+"/model/role/findRoleByRoleName.do",{"roleName":value,"resourceNo":resourceNo});
});
至此,验证功能实现!