力所能及之使用Struts控制器异步校验用户名是否重复

操作系统:Windows 7 

应用程序服务器:apache-tomcat-6.0.18

开发工具:MyEclipse8.6

Java版本:JDK1.6

MyBatis: 3.2.2

Struts版本:struts-2.3

jQuery版本:jquery-1.4.2.js

MySql版本: 5.0 MySQL Community Server (GPL)

mysql-connector-java:5.0.18


2013年4月16日注:本例中采用的JSON数据格式,推荐使用性能更好的jackson进行序列化,不要使用json-lib


关键点:

1.引入包:struts2对数据进行json序列化,必须要用到struts2的json-lib,struts2-json-plugin包;

2.json数据处理:异步提交的数据采用json格式,struts2-json-plugin会对数据进行json处理,所以struts2配置文件struts.xml中的package节点的extends必须是:extends="json-default";

例如:<package name="default" namespace="/test" extends="json-default">

3.同样的由于返回的是json数据,所以result的类型也必须采用json;

注意:struts2只能在引入json-lib,struts2-json-plugin包时,result的type属性设定json才不会报错:<result name="userInfo" type="json"></result>

4.针对异步提交,action的result节点值应该为空,即不能再转向(例如:只能为<result name="userInfo" type="json"></result>);

时序:

绿色代表客户端请求;紫色代表从数据库返回到客户端。

jsp-----(表单提交)---->jQuery------(ajax异步)----->Struts2-----(action取得json数据)----->调用service------->其它(mybatis等)-----(model)----->DB

DB----(model)------>mybatis--------->service-------Struts2(action,result)------->jQuery(ajax)---------->jsp

数据表结构


领域模型

package qh.zcy.entity;

import java.util.Date;

public class UserInfo {
   
    private Integer id;

    private String username;

    private String password;

    private Integer age;

    private Date insertdata;

	public UserInfo(Integer id, String username, String password, Integer age,
			Date insertdata) {
		super();
		this.id = id;
		this.username = username;
		this.password = password;
		this.age = age;
		this.insertdata = insertdata;
	}

	public UserInfo() {
		super();
	}
    @Override
    public String toString() {
    	// TODO Auto-generated method stub
    	return "id="+id+",username="+username+",password="+password+",age="+age+",insertdata="+insertdata;
    }
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public Date getInsertdata() {
		return insertdata;
	}

	public void setInsertdata(Date insertdata) {
		this.insertdata = insertdata;
	}
    
    
    
}

UserinfoMapper.xml

底层BaseDaoImpl.java

public int isIn(Map<String, String> isInMap){
		SqlSession sqlSession=GetSqlSession.getSqlSession();
		int count=sqlSession.selectOne("qh.zcy.dao.UserInfo.isIn", isInMap);
		return count;
	}
UserInfoDaoImpl.java

public class UserInfoDaoImpl implements UserInfoDao {

	private BaseDao dao=GetBaseDao.getBaseDao();
	
	@Override
	public int isIn(Map<String, String> isInMap) {
		// TODO Auto-generated method stub
		int count=-1;
		try {
			count=dao.isIn(isInMap);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			GetSqlSession.rollback();
		}finally{
			GetSqlSession.commit();
		}
		return count;
	}

	
	
}

业务层UserInfoServiceImpl.java

public class UserInfoServiceImpl implements UserInfoService {

	private UserInfoDao dao=new UserInfoDaoImpl();
	@Override
	public boolean isIn(Map<String, String> isInMap) {
		// TODO Auto-generated method stub
		boolean flag=false;
		int count =dao.isIn(isInMap);
		Log.getLog().info("count="+count);
		if(count >0){
			flag=false;
		}
		else{
			flag=true;
		}
		return flag;
	}

	
}

Struts控制器IsInAction.java

public class IsInAction extends ActionSupport{

	
	private String msg;
	private String username;
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		UserInfoService service=new UserInfoServiceImpl();
		Log.getLog().info("username="+username);
		Map<String, String> isInMap=new HashMap<String, String>();
		isInMap.put("username", username);
		@SuppressWarnings("unused")
		boolean flag=service.isIn(isInMap);
		Log.getLog().info("flag="+flag);
		if(flag==false){
			this.setMsg("该用户名已存在");
		}else{
			this.setMsg("你可以使用这个用户名");
		}
		return SUCCESS;
	}
}

struts.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
	
	<struts>
	    <constant name="struts.action.extension" value="action"></constant>
	    <constant name="struts.devMode" value="true"></constant>
	
	    <package name="JSONName" namespace="/" extends="json-default">
	        <action name="isIn" class="qh.zcy.action.IsInAction">
	            <result type="json" name="success"></result>
	        
	        </action>
	    
	    
	    </package> 
	    
	    
	</struts>
表现层 json ajax jquery

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>注册UserInfo</title>
    
	<script type="text/javascript" src="js/jquery-1.4.2.js"></script>
	<script type="text/javascript">
	   $(function(){
	      $("#username").mouseleave(function(){  
                var username=$("#username").val();  
                //alert("username="+username);
                if(username==""){  
                   $("#msg").html("用户名不为空");  
                   return ;  
                } 
	            $.ajax({  
                url:'isIn.action',  
                type:'POST',  
                data:"username="+username,  
                dataType:'json',  
                success:function (data) {  
                    $("#msg").html(data.msg);  
                }  
               }); 
             $("#username").keydown(function(){ 
	     
	                  $("#msg").html(null);
	             }); 
	    });
	    
	  
	    });
	    
	</script>
  </head>

      <body>  
        <form action="ajax.do" method="post">  
           <p>用户名:<input type="text" name="username" id="username"/><div id="msg"></div> </p>  
           <p>密码:<input type="password" name="password" id="password"/></p>  
           <p><input type="button" name="login" id="login" value="登陆"/></p>  
            
        </form>  
    </body>  
</html>

我的工程:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值