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

在用户的新增(add)、编辑(edit)中对用户名(username)、密码(password)进行非空校验帐号(account)的唯一性校验

成都创新互联公司专注于企业成都全网营销、网站重做改版、点军网站定制设计、自适应品牌网站建设、H5场景定制商城网站建设、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为点军等各大城市提供网站开发制作服务。

需要注意的是在编辑页面(editUI.jsp)帐号(account)的唯一性校验要排除当前编辑的帐号,不然将出现无法保存的情况。

1、JSP页面

在jsp页面中,分别进行两个时机的校验,①是在编辑帐号(account)的表单域时需要到服务器中校验是否已经存在输入的帐号;②在提交(submit)表单时再次进行校验,避免在填写表单时帐号已被使用的情况;


表单部分


    
    
    
    
    

addUI.jsp中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();
    		}
    	}
    

注意:上述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 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 findUserByAccountAndId(String id, String account);

UserServiceImpl.java

	public List findUserByAccountAndId(String id, String account) {
		return userDao.findUserByAccountAndId(id,account);
	}

2.3、dao层

UserDao.java

List findUserByAccountAndId(String id, String account);

UserDaoImpl.java

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


新闻标题:SSH系列:(12)用户管理-表单校验
网页路径:http://scyanting.com/article/jehipj.html