本文是说在新增修改用户时,保存前的校验,校验有效的用户名的唯一性:
1.在新增用户的时候,输入用户名之后,给input框加一个onblur事件,然后验证用户名唯一性,在后台方法中,先查询一下数据库中是否存在输入的用户名,如果存在并且为有效的,则提示“登录名称已存在,请重新输入”,若存在但为无效的或者不存在的时候提示“登录名称可以使用”,然后保存即可。代码如下:
Js代码:
function checkUser() {
if($("#logonName").val() != ""){
$.post("${ctx }/mhlfuser/checkUser?logonName="+$("#logonName").val(),
{ Action: "post"},
function (data, textStatus){
//初始值
if(data.result){
$("#showMsg").html("登录名称已存在,请重新输入");
$("#showMsg").css("color","red");
$("#logonName").val("");
}else{
$("#showMsg").html("登录名称可以使用");
$("#showMsg").css("color","green");
}
}
, "json");
}else{
$("#showMsg").html("请输入登录名称");
$("#showMsg").css("color","red");
return false;
}
}
Html代码:
<tr id="result">
<td width="16%" style="text-align:right;">工号:</td>
<td width="26%" >
<c:if test="${obj.userId == null }">
<input type="text" class="dfinput" id="logonName" name="user.logonName" onblur="checkUser()" value="${obj.user.logonName}" datatype="*1-15" nullmsg="请输入登录名称!" errormsg="长度不超过15个汉字!"/>
</c:if>
<%-- 如果是修改的话用户名不能修改--%>
<c:if test="${obj.userId != null }">
${obj.user.logonName} <input type="hidden" id="logonName" name="user.logonName" value="${obj.user.logonName}" />
</c:if>
</td>
<td style="text-align:left;" width="30%"> <span id="showMsg"></span>
</td>
</tr>
后台方法:
1>保存方法:
/**
* 新增,修改功能的保存操作.
*/
@At
@Ok("jsp:jsp.authority.user.success")
public void saveUser(@Param("::user.") User user, String authorityIds,String fileId,HttpSession session, HttpServletRequest request){
if(user != null){
if(Strings.isEmpty(user.getUserId())){
user.setUserId(UUID.randomUUID().toString().replaceAll("-", ""));
@SuppressWarnings("unused")
User sessionUser = (User)request.getSession().getAttribute(SystemConstants.SYSTEM_USER);
dao.insert(user);
}else{
User okuser = dao.fetch(User.class, user.getUserId());
okuser.setLogonName(user.getLogonName());
okuser.setDisplayName(user.getDisplayName());
okuser.setStatus(user.getStatus());
okuser.setPhone(user.getPhone());
okuser.setDuty(user.getDuty()); okuser.setIsLeader(user.getIsLeader());
dao.update(okuser);
}
}
}
2> checkUser方法,在最下边。
2.在修改用户的时候,例如:
现在已经存在一个用户名为zhangsan的用户且为有效,如果此时再新增一条用户名为zhangsan的用户的话,就会提示已经存在;
这时候,如果把那条有效的zhangsan的用户名 的有效性修改为无效之后,我再新增zhangsan就可以新增;
此时会出现一个小问题,那就是此时数据库中存在两条用户名为zhangsan的用户,一条为有效,一条为无效且都是可以进行修改的;
如果此时想把无效的那条zhangsan改成有效的话是不可行的,因为已经存在有效的一样的用户名,所以,我在选择是否有效的时候加了个onchange验证,在选择有效的时候需要验证有效性,选无效的时候则不需要验证,代码如下:
Js代码:
function checkStatus() {
var status = $('input:radio[name="user.status"]:checked').val();
if(status == '1'){
checkUser1();
}
}
function checkUser1() {
if($("#logonName").val() != ""){
$.post("${ctx }/mhlfuser/checkUser?logonName="+$("#logonName").val(),
{ Action: "post"},
function (data, textStatus){
//初始值
if(data.result){
alert("该用户已经存在并且有效,不能修改!");
$('input:radio[name="user.status"][value=0]').attr("checked",true);
}
}
, "json");
}
}
html代码:
<tr id="result">
<td style="text-align:right;">是否有效:</td>
<td >
<input type="radio" id="status" name="user.status" onchange="checkStatus()" value="1" <c:if test="${obj.user.status == '1' || obj.user.status == null}">checked="checked"</c:if>/>有效
<input type="radio" id="status" name="user.status" onchange="checkStatus()" value="0" <c:if test="${obj.user.status == 0}">checked="checked"</c:if>/>无效
</td>
<td> </td>
</tr>
后台方法:
/**
* 验证用户是否存在.
*/
@At
@Ok("json")
public Map<String, Object> checkUser(String logonName){
Map<String, Object> result = new HashMap<String, Object>();
if(!Strings.isEmpty(logonName)){
User user = dao.fetch(User.class, Cnd.where("logonName", "=", logonName).and("status","=","1"));
if(user != null){
result.put("result", true);
}else{
result.put("result", false);
}
}else{
result.put("result", false);
}
return result;
}