使用struts2+Ajax+jquery验证用户名是否已被注册


Posted in Javascript onMarch 22, 2016

推荐阅读:JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册

在用户模块中的用户注册需求上,通常要进行用户名是否已被注册的验证,今天正好写了这个需求,把详细代码和所遇到的问题贴过来.在使用struts2+ajax时候,通常我们会返回json类型的数据,但是像上面的例子,我们只希望返回一个1和0有助于进行后续判断即可,没必要返回json类型,返回一个text字符串就可以了.

regist.jsp(这里只提供<script>部分):

<script type="text/javascript">
$(function() {
$("#userNiName").blur(function() {
var val = $(this).val();
val = $.trim(val);
var $this = $(this);
if (val != "") {
//把当前节点后面的所有 font 兄弟节点删除
$this.nextAll("font").remove();
var url = "user_checkName";
var args = {
"userNiName" : val,
"time" : new Date()
};
$.post(url, args, function(data) {
//表示可用
if (data == "1") {
$this.after("<font color='green'>用户名可用!</font>");
}
//不可用
else if (data == "0") {
$this.after("<font color='red'>用户名已被注册!</font>");
}
//服务器错误
else {
alert("服务器错误!");
}
});
} else {
$(this).val("");
$this.focus();
}
});
})
</script>

这里我是用了Jquery.post(url,args,function(data){..})函数提交ajax请求到指定url,并且携带参数args,最后用一个回调函数处理请求返回结果data.

UserAction:

public class UserAction extends ActionSupport implements ModelDriven<User>{
private User user=new User();
private UserService userService;
private InputStream inputStream;
public InputStream getInputStream() {
return inputStream;
}
//检验用户昵称是否存在
public String checkName() throws UnsupportedEncodingException{
System.out.println("进入ajax检验");
String userNiName=user.getUserNiName();
if(userService.findUserByName(userNiName)==null){
inputStream=new ByteArrayInputStream("1".getBytes("UTF-8"));
}else{
inputStream=new ByteArrayInputStream("0".getBytes("UTF-8"));
}
return "ajax_succ";
}
@Override
public User getModel() {
return user;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}

注意:这里我用的是ModelDriven的方式获取表单数据,而在使用ajax的时候,直接传了一个userNiName(昵称)过来,于是我在UserAction中加了一个私有字符串变量userNiName,并设置了set方法.结果死活传不过值来,传过来的是一个null,于是我将私有变量删掉,然后直接用user.getUserNiName()直接获取就得到了.切记.

UserService(省略).

User类(省略).

UserDao:

package com.wang.shop.user.dao;
import java.util.List;

import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
import com.wang.shop.user.entity.User;
public class UserDao extends HibernateDaoSupport{
/**
* 通过用户昵称查询User
* @param userNiName
* @return
*/
public User findUserByName(String userNiName){
List<User> list = (List<User>) this.getHibernateTemplate().find("select u from User u where u.userNiName=?", userNiName);
if(list!=null&&list.size()>0){
System.out.println("list:"+list.get(0));
return list.get(0);
}
return null;
}
}

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>
<package name="shop" namespace="/" extends="struts-default">
<!-- UserAction -->
<action name="user_*" class="userAction" method="{1}">
<result name="regist_succ">/WEB-INF/jspForUser/login.jsp</result>
<result type="stream" name="ajax_succ">
<param name="contentType">text/html</param>
<param name="inputStream">inputStream</param>
</result>
</action>
</package>
</struts>

注意在result标签中,type="stream".

最后顺带说一句,我在调试的时候习惯使用输出语句,但每次加一句输出语句都需要重启Tomcat,好烦.于是参考网上的方式,将Tmocat安装目录下,conf->server.xml中在<host>标签下添加了以下代码,就可以修改类(细微的修改)的时候,不需要重启服务器了:

<!--docBase就是你的项目工程所在的全路径,path就是写你的项目名,reloadable="true",可以自动重新加载修改过的class文件-->
<Context debug="0" docBase="D:\Tomcat 7.0\webapps\SSH_shop01" path="/SSH_shop01" reloadable="true" />

需要特别注意的是,当在Tomcat中卸载了该项目后,一定要回来将这个标签删除.

使用struts2+Ajax+jquery验证用户名是否已被注册的知识,小编就给大家介绍这么多,希望对大家有所帮助!

Javascript 相关文章推荐
打造基于jQuery的高性能TreeView(asp.net)
Feb 23 Javascript
cument.execCommand()用法深入理解
Dec 04 Javascript
封装的jquery翻页滚动(示例代码)
Nov 18 Javascript
js的alert样式如何更改如背景颜色
Jan 22 Javascript
浅谈Javascript线程及定时机制
Jul 02 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
Jul 27 Javascript
AngularJS中$watch和$timeout的使用示例
Sep 20 Javascript
浅谈JS验证表单文本域输入空格的问题
Feb 14 Javascript
如何选择适合你的JavaScript框架
Nov 20 Javascript
vue实现点击展开点击收起效果
Apr 27 Javascript
vue-router 手势滑动触发返回功能
Sep 30 Javascript
图解JS原型和原型链实现原理
Sep 15 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
Mar 22 #Javascript
Node.js文件操作方法汇总
Mar 22 #Javascript
浅谈Sticky组件的改进实现
Mar 22 #Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
Mar 22 #Javascript
关于JS中match() 和 exec() 返回值和属性的测试
Mar 21 #Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
Mar 21 #Javascript
快速掌握Node.js事件驱动模型
Mar 21 #Javascript
You might like
谈一谈收音机的高放电路
2021/03/02 无线电
php全角字符转换为半角函数
2014/02/07 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
Prototype String对象 学习
2009/07/19 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
js从Cookies里面取值的简单实现
2014/06/30 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
Javascript异步编程async实现过程详解
2020/04/02 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
python解析json实例方法
2013/11/19 Python
python检测远程udp端口是否打开的方法
2015/03/14 Python
python版简单工厂模式
2017/10/16 Python
详解如何在Apache中运行Python WSGI应用
2019/01/02 Python
Python生成指定数量的优惠码实操内容
2019/06/18 Python
Python any()函数的使用方法
2019/10/28 Python
postman和python mock测试过程图解
2020/02/22 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
Python类的继承super相关原理解析
2020/10/22 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
英国女士家居服网站:hush
2017/08/09 全球购物
群众路线个人对照检查材料2014
2014/09/26 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python
Java多条件判断场景中规则执行器的设计
2021/06/26 Java/Android
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python
基于Python编写一个监控CPU的应用系统
2022/06/25 Python