SSH系列:(12)用户管理-表单校验
在用户的新增(add)、编辑(edit)中对用户名(username)、密码(password)进行非空校验和帐号(account)的唯一性校验。
需要注意的是在编辑页面(editUI.jsp)中帐号(account)的唯一性校验要排除当前编辑的帐号,不然将出现无法保存的情况。
1、JSP页面
在jsp页面中,分别进行两个时机的校验,①是在编辑帐号(account)的表单域时需要到服务器中校验是否已经存在输入的帐号;②在提交(submit)表单时再次进行校验,避免在填写表单时帐号已被使用的情况;
表单部分
<formid="form"name="form"action="${basePath}/tax/user_add.action"method="post"enctype="multipart/form-data"><s:textfieldid="name"name="user.name"/><s:textfieldid="account"name="user.account"onchange="doVerify()"/><s:textfieldid="password"name="user.password"/><inputtype="button"class="btnB2"value="保存"onclick="doSubmit()"/><inputtype="button"onclick="javascript:history.go(-1)"class="btnB2"value="返回"/></form>
addUI.jsp中Javascript部分
<scripttype="text/javascript">varvResult=false;//检验帐号唯一性functiondoVerify(){//1、获取帐号varaccount=$('#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;}}});}}//提交表单functiondoSubmit(){var$name=$('#name');if($name.val()==""){alert("用户名不能为空!");$name.focus();returnfalse;}var$password=$('#password');if($password.val()==""){alert("密码不能为!");$password.focus();returnfalse;}//帐号校验doVerify();if(vResult){//提交表单document.forms[0].submit();}}</script>
注意:上述javascript中的doVerify()方法中,$.ajax方法中的async参数为false,它的目的是实现帐号的同步验证,而不是异步验证。
editUI.jsp内的Javascript部分有一点不同,就是:在进行帐号(account)验证的时候,需要同时传递id过去。
varvResult=false;//检验帐号唯一性functiondoVerify(){//1、获取帐号varaccount=$('#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
http://www.tuicool.com/articles/bQzaEzI
Struts2中的ModelDriven机制及其运用
http://blog.csdn.net/li_tengfei/article/details/6098145
2、后台(服务器端)
2.1、action层
UserAction.java
publicvoidverifyAccount(){try{//1、获取账号if(user!=null&&StringUtils.isNotBlank(user.getAccount())){//2、根据帐号到数据库校验是否存在该帐号对应的用户List<User>list=userService.findUserByAccountAndId(user.getId(),user.getAccount());StringstrResult="true";if(list!=null&&list.size()>0){//说明该帐号已经存在strResult="false";}//输出HttpServletResponseresponse=ServletActionContext.getResponse();response.setContentType("text/plain");ServletOutputStreamoutputStream=response.getOutputStream();outputStream.write(strResult.getBytes());outputStream.close();}}catch(IOExceptione){e.printStackTrace();}}
知识点(1)StringUtils
org.apache.commons.lang3.StringUtils
位于struts-2.3.29\commons-lang3-3.2.jar中
publicstaticbooleanisEmpty(CharSequencecs){returncs==null||cs.length()==0;}publicstaticbooleanisNotEmpty(CharSequencecs){return!isEmpty(cs);}publicstaticbooleanisBlank(CharSequencecs){intstrLen;if(cs==null||(strLen=cs.length())==0)returntrue;for(inti=0;i<strLen;i++)if(!Character.isWhitespace(cs.charAt(i)))returnfalse;returntrue;}publicstaticbooleanisNotBlank(CharSequencecs){return!isBlank(cs);}
2.2、service层
UserService.java
List<User>findUserByAccountAndId(Stringid,Stringaccount);
UserServiceImpl.java
publicList<User>findUserByAccountAndId(Stringid,Stringaccount){returnuserDao.findUserByAccountAndId(id,account);}
2.3、dao层
UserDao.java
List<User>findUserByAccountAndId(Stringid,Stringaccount);
UserDaoImpl.java
publicList<User>findUserByAccountAndId(Stringid,Stringaccount){Stringhql="fromUserwhereaccount=?";if(StringUtils.isNotBlank(id)){hql+="andid!=?";}Queryquery=getSession().createQuery(hql);query.setParameter(0,account);if(StringUtils.isNotBlank(id)){query.setParameter(1,id);}returnquery.list();}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。