使用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和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
Jun 17 Javascript
JS实现根据当前文字选择返回被选中的文字
May 21 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
Jun 07 Javascript
JS实现自动阅读单词(有道单词本添加功能)
Nov 14 Javascript
Three.js如何实现雾化效果示例代码
Sep 27 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
Mar 06 Javascript
js Element Traversal规范中的元素遍历方法
Apr 19 Javascript
mpvue 如何使用腾讯视频插件的方法
Jul 16 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
Aug 20 Javascript
vue微信分享到朋友圈 vue微信发送给好友
Nov 28 Javascript
监控微信小程序中的慢HTTP请求过程详解
Jul 05 Javascript
利用JS判断元素是否为数组的方法示例
Jan 08 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
社区(php&amp;&amp;mysql)五
2006/10/09 PHP
php基础知识:类与对象(5) static
2006/12/13 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
详解PHP中foreach的用法和实例
2016/10/25 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
Python从文件中读取数据的方法讲解
2019/02/14 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
大四毕业生学习总结的自我评价
2013/10/31 职场文书
小学五年级学生评语
2014/04/22 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书
初婚未育证明样本
2014/10/24 职场文书
MySQL笔记 —SQL运算符
2022/01/18 MySQL
pytorch中的 .view()函数的用法介绍
2022/03/17 Python