验证用户添加或者修改时用户名的唯一性:
验证时机:用户名改变时,表单提交时。
1.jsp页面:(前端)
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <html> 3 <head> 4 <%@include file="/common/header.jsp"%> 5 <title>用户管理</title> 6 <script type="text/javascript" src="${basePath }js/datepicker/WdatePicker.js"></script> 7 <script type="text/javascript"> 8 var vResult = false; 9 //校验帐号唯一 10 function doVerify(){ 11 //1、获取帐号 12 var account = $("#account").val(); 13 if(account != ""){ 14 //2、校验 15 $.ajax({ 16 url:"${basePath}nsfw/user_verifyAccount.action", 17 data: {"user.account": account}, 18 type: "post", 19 async: false,//非异步 20 success: function(msg){ 21 if("true" != msg){ 22 //帐号已经存在 23 alert("帐号已经存在。请使用其它帐号!"); 24 //定焦 25 $("#account").focus(); 26 vResult = false; 27 } else { 28 vResult = true; 29 } 30 } 31 }); 32 } 33 } 34 //提交表单 35 function doSubmit(){ 36 var name = $("#name"); 37 if(name.val() == ""){ 38 alert("用户名不能为空!"); 39 name.focus(); 40 return false; 41 } 42 var password = $("#password"); 43 if(password.val() == ""){ 44 alert("密码不能为空!"); 45 password.focus(); 46 return false; 47 } 48 //帐号校验 49 doVerify(); 50 if(vResult){ 51 //提交表单 52 document.forms[0].submit(); 53 } 54 } 55 </script> 56 </head> 57 <body class="rightBody"> 58 <form id="form" name="form" action="${basePath }nsfw/user_add.action" method="post" enctype="multipart/form-data"> 59 <div class="p_d_1"> 60 <div class="p_d_1_1"> 61 <div class="content_info"> 62 <div class="c_crumbs"><div><b></b><strong>用户管理</strong> - 新增用户</div></div> 63 <div class="tableH2">新增用户</div> 64 <table id="baseInfo" width="100%" align="center" class="list" border="0" cellpadding="0" cellspacing="0" > 65 <tr> 66 <td class="tdBg" width="200px">所属部门:</td> 67 <td><s:select name="user.dept" list="#{'部门A':'部门A','部门B':'部门B' }"/></td> 68 </tr> 69 <tr> 70 <td class="tdBg" width="200px">头像:</td> 71 <td> 72 <input type="file" name="headImg"/> 73 </td> 74 </tr> 75 <tr> 76 <td class="tdBg" width="200px">用户名:</td> 77 <td><s:textfield id="name" name="user.name"/> </td> 78 </tr> 79 <tr> 80 <td class="tdBg" width="200px">帐号:</td> 81 <td><s:textfield id="account" name="user.account" onchange="doVerify()"/></td> 82 </tr> 83 <tr> 84 <td class="tdBg" width="200px">密码:</td> 85 <td><s:textfield id="password" name="user.password"/></td> 86 </tr> 87 <tr> 88 <td class="tdBg" width="200px">性别:</td> 89 <td><s:radio list="#{'true':'男','false':'女'}" name="user.gender"/></td> 90 </tr> 91 <tr> 92 <td class="tdBg" width="200px">角色:</td> 93 <td></td> 94 </tr> 95 <tr> 96 <td class="tdBg" width="200px">电子邮箱:</td> 97 <td><s:textfield name="user.email"/></td> 98 </tr> 99 <tr> 100 <td class="tdBg" width="200px">手机号:</td> 101 <td><s:textfield name="user.mobile"/></td> 102 </tr> 103 <tr> 104 <td class="tdBg" width="200px">生日:</td> 105 <td><s:textfield id="birthday" name="user.birthday" readonly="true" onfocus="WdatePicker({'skin':'whyGreen','dateFmt':'yyyy-MM-dd'});" /></td> 106 </tr> 107 <tr> 108 <td class="tdBg" width="200px">状态:</td> 109 <td><s:radio list="#{'1':'有效','0':'无效'}" name="user.state" value="1"/></td> 110 </tr> 111 <tr> 112 <td class="tdBg" width="200px">备注:</td> 113 <td><s:textarea name="user.memo" cols="75" rows="3"/></td> 114 </tr> 115 </table> 116 <div class="tc mt20"> 117 <input type="button" class="btnB2" value="保存" onclick="doSubmit()" /> 118 119 <input type="button" onclick="javascript:history.go(-1)" class="btnB2" value="返回" /> 120 </div> 121 </div></div></div> 122 </form> 123 </body> 124 </html>
2.java代码:(action层):
1 //校验用户帐号唯一 2 public void verifyAccount(){ 3 try { 4 //1、获取帐号 5 if(user != null && StringUtils.isNotBlank(user.getAccount())){ 6 //2、根据帐号到数据库中校验是否存在该帐号对应的用户 7 List<User> list = userService.findUserByAccountAndId(user.getId(), user.getAccount()); 8 String strResult = "true"; 9 if(list != null && list.size() > 0){ 10 //说明该帐号已经存在 11 strResult = "false"; 12 } 13 14 //输出 15 HttpServletResponse response = ServletActionContext.getResponse(); 16 response.setContentType("text/html"); 17 ServletOutputStream outputStream = response.getOutputStream(); 18 outputStream.write(strResult.getBytes()); 19 outputStream.close(); 20 } 21 } catch (Exception e) { 22 e.printStackTrace(); 23 } 24 }
3.在daoimpl里面实现findUserByAccountAndId方法:
1 public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao { 2 3 @Override 4 public List<User> findUserByAccountAndId(String id, String account) { 5 String hql = "FROM User WHERE account = ?"; 6 if(StringUtils.isNotBlank(id)){ 7 hql += " AND id!=?"; 8 } 9 Query query = getSession().createQuery(hql); 10 query.setParameter(0, account); 11 if(StringUtils.isNotBlank(id)){ 12 query.setParameter(1, id); 13 } 14 15 return query.list(); 16 } 17 18 }