手记

SSH系列:用户管理-表单校验


在用户的新增(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>


注意:上述javascript中的doVerify()方法中,$.ajax方法中的async参数为false,它的目的是实现帐号的同步验证,而不是异步验证。


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表达式可以取值 

http://www.tuicool.com/articles/bQzaEzI


Struts2中的ModelDriven机制及其运用

http://blog.csdn.net/li_tengfei/article/details/6098145






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();	}














0人推荐
随时随地看视频
慕课网APP