ajax+struts2检测用户名是否被占用
借用ajax,可以实现用户注册时,实时检测用户名是否被占用,更加友好。总不能在用户提交注册信息之后,再告诉他/她用户名已被占用吧,我就碰到过这样的网站。自己照着网上的教程,也搜索过一些知识点,添加了一段ajax+struts2的检测程序。
首先是注册表单页面
js文件
当username对应的文本输入框失去焦点(onblur)时,调用下面的checkUsernameExist()函数
表单页面
对应的action处理类
package com.chris.action;
import java.io.PrintWriter;
import javax.servlet.ServletResponse;
import org.apache.struts2.ServletActionContext;
import com.chris.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
public class UsernameCheck extends ActionSupport {
private String username;
//业务逻辑组件,使用依赖注入的方式创建实例
private UserService userService;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public String execute() throws Exception {
//使用ServletActionContext工具类,得到一个response对象
ServletResponse response = ServletActionContext.getResponse();
PrintWriter writer = response.getWriter();
//检测到已经存在,会返回true
if(userService.checkUsername(username)) {
//为了自己方便,添加的控制台打印语句
System.out.println(username + " already exist");
//write中的内容,会传递到客户端xhr对象的responseText中
//“1”表示已经存在
writer.write("1");
} else {
System.out.println(username + " does not exist");
writer.write("0");
}
//因为重写execute()方法,必须返回一个String字符串。这里返回null,因为不需要返回页面
return null;
}
}
假设已经写好了数据库、PO、DAO和业务逻辑之类的,那么,加一个检测用户名是否被占用的业务逻辑方法就可以了。
业务逻辑方法
//检测用户名是否占用的业务逻辑方法
//用户名已存在,则返回true
public boolean checkUsername(String username) {
if(userDAO.queryByID(username) != null) {
return true;
} else {
return false;
}
}
依赖注入文件配置
在applicationContext.xml中,为UsernameCheck这个Action类注入业务逻辑组件userService。
action.xml文件配置
在action.xml中添加结果文件配置,
由于这里没有返回页面,故没有配置result。注意,这里的class应该配置成applicationContext.xml文件中配置的bean的id,因为是采用依赖注入的方式来实例化类,不再由struts2来根据实现类来实例化,而是通过id来获取一个Action实例。
如有疑问,欢迎指出,共同进步。