在用户的新增(add)、编辑(edit)中对用户名(username)、密码(password)进行非空校验和帐号(account)的唯一性校验。
需要注意的是在编辑页面(editUI.jsp)中帐号(account)的唯一性校验要排除当前编辑的帐号,不然将出现无法保存的情况。
1、JSP页面
在jsp页面中,分别进行两个时机的校验,①是在编辑帐号(account)的表单域时需要到服务器中校验是否已经存在输入的帐号;②在提交(submit)表单时再次进行校验,避免在填写表单时帐号已被使用的情况;
表单部分
<form id="form" name="form" action="${basePath}/tax/user_add.action" method="post" enctype="multipart/form-data"> <s:textfield id="name" name="user.name"/> <s:textfield id="account" name="user.account" onchange="doVerify()"/> <s:textfield id="password" name="user.password"/> <input type="button" class="btnB2" value="保存" onclick="doSubmit()"/> <input type="button" onclick="javascript:history.go(-1)" class="btnB2" value="返回" /> </form>
addUI.jsp中Javascript部分
<script type="text/javascript"> var vResult = false; //检验帐号唯一性 function doVerify(){ //1、获取帐号 var account = $(‘#account‘).val(); if(account != null){ //2、校验 $.ajax({ url:"${basePath}/tax/user_verifyAccount.action", data:{"user.account":account}, type:"post", async:false,//非异步 success:function(msg){ if("true" != msg){ //帐号已经存在 alert("帐号已经存在。请使用其它账号"); //定焦 $(‘#account‘).focus(); vResult = false; } else{ vResult = true; } } }); } } //提交表单 function doSubmit(){ var $name = $(‘#name‘); if($name.val() == ""){ alert("用户名不能为空!"); $name.focus(); return false; } var $password = $(‘#password‘); if($password.val() == ""){ alert("密码不能为!"); $password.focus(); return false; } //帐号校验 doVerify(); if(vResult){ //提交表单 document.forms[0].submit(); } } </script>
editUI.jsp内的Javascript部分有一点不同,就是:在进行帐号(account)验证的时候,需要同时传递id过去。
var vResult = false; //检验帐号唯一性 function doVerify(){ //1、获取帐号 var account = $(‘#account‘).val(); if(account != null){ //2、校验 $.ajax({ url:"${basePath}/tax/user_verifyAccount.action", data:{"user.account":account,"user.id":"${user.id}"},//注意:这里是用EL表达式取ValueStack上的值 type:"post", async:false,//非异步 success:function(msg){ if("true" != msg){ //帐号已经存在 alert("帐号已经存在。请使用其它账号"); //定焦 $(‘#account‘).focus(); vResult = false; } else{ vResult = true; } } }); } }
知识点(1)EL表达式获取ValueStack上的值
Struts2中EL表达式取值 http://blog.csdn.net/cuihaiyang/article/details/41950141 struts2 request内幕 为什么在struts2用EL表达式可以取值 |
2、后台(服务器端)
2.1、action层
UserAction.java
public void verifyAccount(){ try { //1、获取账号 if(user != null && StringUtils.isNotBlank(user.getAccount())){ //2、根据帐号到数据库校验是否存在该帐号对应的用户 List<User> list = userService.findUserByAccountAndId(user.getId(),user.getAccount()); String strResult = "true"; if(list != null && list.size()>0){ //说明该帐号已经存在 strResult = "false"; } //输出 HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("text/plain"); ServletOutputStream outputStream = response.getOutputStream(); outputStream.write(strResult.getBytes()); outputStream.close(); } } catch (IOException e) { e.printStackTrace(); } }
知识点(1)StringUtils
org.apache.commons.lang3.StringUtils 位于struts-2.3.29\commons-lang3-3.2.jar中 public static boolean isEmpty(CharSequence cs) { return cs == null || cs.length() == 0; } public static boolean isNotEmpty(CharSequence cs) { return !isEmpty(cs); } public static boolean isBlank(CharSequence cs) { int strLen; if(cs == null || (strLen = cs.length()) == 0) return true; for(int i = 0; i < strLen; i++) if(!Character.isWhitespace(cs.charAt(i))) return false; return true; } public static boolean isNotBlank(CharSequence cs) { return !isBlank(cs); } |
2.2、service层
UserService.java
List<User> findUserByAccountAndId(String id, String account);
UserServiceImpl.java
public List<User> findUserByAccountAndId(String id, String account) { return userDao.findUserByAccountAndId(id,account); }
2.3、dao层
UserDao.java
List<User> findUserByAccountAndId(String id, String account);
UserDaoImpl.java
public List<User> findUserByAccountAndId(String id, String account) { String hql = "from User where account=?"; if(StringUtils.isNotBlank(id)){ hql += " and id !=?"; } Query query = getSession().createQuery(hql); query.setParameter(0, account); if(StringUtils.isNotBlank(id)){ query.setParameter(1, id); } return query.list(); }
时间: 2024-10-09 08:15:33