问题描述
我想在struts2中加入Ajax做用户名是否重复的判断,不知道该怎么做,如果用sevlet我倒是会做的,可是在struts2中好像做不了啊。。。求各位帮我看看要怎么做啊?做好能给完整的例子让我研究下。
解决方案
正好我刚做了一个相关的作业设计,给你看看,就是用的struts2,其实就是action不返回原来的string结果,用struts里的servletActionContext类的geiResponse()方法获取底层HttpServletResponse的引用,然后就和servlet里面一样了,看代码的..struts的action类:package com.ray;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import org.hibernate.Session;public class CheckUserAction {public String execute() throws Exception{try{String responseText="";HttpServletRequest request=ServletActionContext.getRequest();String username=request.getParameter("user");Session session=com.ray.HibernateSessionFactory.getSession();User user=(User)session.get(User.class, username);if(user==null){responseText="恭喜,用户名可用";}elseresponseText="此用户名已被使用";HttpServletResponse response=ServletActionContext.getResponse();response.setCharacterEncoding("gb2312");response.setContentType("text/plain");PrintWriter out=response.getWriter();out.print(responseText);out.flush();out.close();session.close();}catch(IOException e){e.printStackTrace();}return null;}}检查用户名的Ajax:function checkuser(){ var xmlHttp; var reguser=document.all.form2.reguser.value; if(reguser.length>=3){ if(window.ActiveXObject){ xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); }else xmlHttp=new XMLHttpRequest(); xmlHttp.open("get","check.action?user="+reguser,true); xmlHttp.onreadystatechange=function(){ if(xmlHttp.readyState==4){ if(xmlHttp.status==200){ checkSpan.innerText=xmlHttp.responseText; }else checkSpan.innerText+="正在检查,请稍等..."; } }; xmlHttp.send(); }else alert("账号至少3位"); }
解决方案二:
http://download.csdn.net/download/j1582830/2634790http://wenku.baidu.com/view/d5c066f6f61fb7360b4c650f.html建议使用验证工具 如validForm http://validform.rjboy.cn/ 你可以如下这样写 <input type="text" class="text Validform_error" id="customerId" name="cm.customerId" value="" ajaxurl="/customer/validate/customerId" datatype="r/^[u4E00-u9FA5uf900-ufa2dw]{5,20}$/" nullmsg="5-20个字符,可由字母、数字、汉字或“_”组成" errormsg="5-20个字符,可由字母、数字、汉字或“_”组成" size="25" valid="用户名已经被占用">
解决方案三:
用DWR或者jqueryAjax就可以实现
解决方案四:
基本买模型$.post(action,params,function(data){ if(data.success){ alert('用户名可用'); }else{ alert('用户名重复'); }});actionpublic MyAction{private String username;private boolean hasUsed;//setter getter public String execute(){ hasUsed = hasUsed(username);}public boolean hasUsed(String username){ //调用service逻辑,返回结果 return true;}}
解决方案五:
力推jquery validate参考连接:http://blog.csdn.net/kebing1990/article/details/6792913$(function(){ $("#myform").validate( { rules: { name:{required:true,rangelength:[6,20], remote:{ //验证用户名是否存在 type:"POST", url:"loginVerifyAction", //servlet data:{ name:function(){return $("#name").val();} } } },
解决方案六:
你可以在用户名的输入框注册一个焦点离开事件,当用户输入完用户名时就发送请求到action调用service和dao从数据库中检索用户名是否重复,重复与否根据你定义的字符串来判断