【SSH项目实战】国税协同平台-8.户帐号唯一性校验

我们之前完成了用户管理列表的增删改查以及头像上传,之后又使用POI技术完成了用户列表信息的Excel导入和Excel文件导出工作。接下来我们来编写与账号有关的业务。

可以看到我们添加用户要指派一个账号

但是我们的账号一定是不能重复的,如果账号已经存在,我们不就能让它保存在系统中,要告诉用户账号已经存在。所以我们这次要进行用户账号唯一性的校验。

校验用户帐号唯一性:

需要校验的地方:新增与编辑;其中编辑页面时,帐号是已经存在的需要将当前帐号排除在校验范围内

校验时机:当帐号的值发生变化时;保存的时候

校验帐号唯一:
前端:ajax

后端:
1、获取帐号
2、校验
2.1、根据帐号查询用户们
     select * from user where account='帐号' and id != '用户id'

我们下面来实现:
在前台我们使用Ajax技术来实现校验,我们先在addUI.jsp中添加相应的js代码,当我们的账号值改变的时候,我们就执行相应的js代码:

<tr>
    <td class="tdBg" width="200px">帐号:</td>
    <td><s:textfield id="account" name="user.account" onchange="doverify()"/></td>
</tr>
相应的js方法:
<script type="text/javascript">
	//校验账号唯一
	function doverify(){
		//1.获取账号
		var account=$("#account").val();
		if(account!=""){
			//2.校验get/post/getJson/ajax
			$.ajax({
				url:"${basePath}tax/user_verifyAccount.action",
				data:{"user.account":account},
				trpe:"post",
				success:function(msg){
					if("true"!=msg){
						//账号已经存在
						alert("账号已经存在,请使用其它账号!");
						//定焦
    						$("#account").focus();
					}
				}
			});
		}
	}
</script>

前台的代码基本上写完,我们在后台实现user_verifyAccount。
首先在UserAction中添加verifyAccount方法:

//检验用户账号唯一
public void verifyAccount(){
	try {
		//1.获取账号
		if (user != null && StringUtils.isNotBlank(user.getAccount())) {
			//2.根据账号到数据库中校验是否存在该账号对应的用户
			List<User> list = userService.findUserByAccountAndId(user.getId(), user.getAccount());
			String strResult = "true";
			if (list != null && list.size() > 0) {
				//说明该账号已经存在
				strResult = "false";
			}

			//输出
			HttpServletResponse response = ServletActionContext
					.getResponse();
			response.setContentType("text/html");
			ServletOutputStream outputStream = response.getOutputStream();
			outputStream.write(strResult.getBytes());
			outputStream.close();
		}
	} catch (Exception e) {
		e.printStackTrace();
	}

}

我们的userService中还没有findUserByAccountAndId方法,我们来实现它。
在接口中定义findUserByAccountAndId()方法,我们在UserServiceImpl中实现这个方法:

@Override
public List<User> findUserByAccountAndId(String id, String account) {
	return userDao.findUserByAccountAndId(id,account);
}

我们的userDao中还没有findUserByAccountAndId方法,我们来实现它。
在接口中定义findUserByAccountAndId()方法,我们在UserDaoImpl中实现这个方法:

@Override
public List<User> findUserByAccountAndId(String id, String account) {
	String hql="FROM User WHERE account = ?";
	if(StringUtils.isNoneBlank(id)){
		hql+=" AND id != ?";
	}
	Query query=getSession().createQuery(hql);
	query.setParameter(0, account);
	if(StringUtils.isNoneBlank(id)){
		query.setParameter(1, id);
	}
	return query.list();
}

前后台的代码都已经完成,我们来测试一下:
我们点击新增,之前我们有一个账号叫“jack”,我们故意输入这个账号之后会发现给予了错误提示

然后我们换一个没有用过的,便不再有提示:

所以我们的账户校验功能成功!

光这么校验还不行,如果用户忽略这个警告继续保存还是不行的,所以我们要在用户点击“保存”按钮的时候再次进行校验:

<input type="submit" class="btnB2" value="保存" onclick="return doSubmit()"/>

检测的js代码:
(我们修改了之前的doverify()方法,所以我将之前代码也放上来。我们设置了一个全局变量vResult,如果我们账号校验成功,vResult就为true,如果校验失败就是默认的false,这样我们就可以控制表单的提交。但是因为Ajax是异步提交,所以我们的vResult的值并不能正确的得到,所以我们要把Ajax的提交方式改为“非异步”,这样才能正确得到vResult的值,从而判断是否可以让用户提交表单)

<script type="text/javascript">
	var vResult=false;

	//校验账号唯一
	function doverify(){
		//1.获取账号
		var account=$("#account").val();
		if(account!=""){
			//2.校验get/post/getJson/ajax
			$.ajax({
				url:"${basePath}tax/user_verifyAccount.action",
				data:{"user.account":account},
				trpe:"post",
				async:false,//非异步
				success:function(msg){
					if("true"!=msg){
						//账号已经存在
						alert("账号已经存在,请使用其它账号!");
						//定焦
						$("#account").focus();
					}else{
						vResult=true;
					}
				}
			});
		}
	}
	//提交表单
	function doSubmit(){
		var name=$("#name");
		if(name.val()==""){
			alert("用户名不能为空!");
			name.focus();
			return false;
		}

		var password=$("#password");
		if(password.val()==""){
			alert("密码不能为空!");
			password.focus();
			return false;
		}
		//账号校验
		doverify();
		if(vResult){
			//允许提交表单
	    		return true;
    		}else{
    			return false;
    		}
	}
</script>

我们测试,故意输入一个重复的账号,忽略警告直接进行保存,但是发现报错了

说明我们的控制成功!

下面我们同时完成编辑界面的数据校验,同样先在用户名、账号、密码上加上id,然后在账户上加上改变事件:

<tr>
    <td class="tdBg" width="200px">用户名:</td>
    <td><s:textfield id="name" name="user.name"/> </td>
</tr>
<tr>
    <td class="tdBg" width="200px">帐号:</td>
    <td><s:textfield id="account" name="user.account" onchange="doverify()"/></td>
</tr>
<tr>
    <td class="tdBg" width="200px">密码:</td>
    <td><s:textfield id="password" name="user.password"/></td>
</tr>

当然还有保存时的校验方法

<input type="submit" class="btnB2" value="保存" onclick="return doSubmit()"/>

js方法(我们检测除了自己之外还有没有人使用这个账号):

<script type="text/javascript">
	var vResult = false;
	//校验帐号唯一
	function doverify(){
		//1、获取帐号
		var account = $("#account").val();
		if(account != ""){
			//2、校验
			$.ajax({
				url:"${basePath}tax/user_verifyAccount.action",
				data: {"user.account": account,"user.id": "${user.id}"},
				type: "post",
				async: false,//非异步
				success: function(msg){
					if("true" != msg){
						//帐号已经存在
						alert("帐号已经存在。请使用其它帐号!");
						//定焦
						$("#account").focus();
						vResult = false;
					} else {
						vResult = true;
					}
				}
			});
		}
	}
	//提交表单
	function doSubmit(){
		var name = $("#name");
		if(name.val() == ""){
			alert("用户名不能为空!");
			name.focus();
			return false;
		}
		var password = $("#password");
		if(password.val() == ""){
			alert("密码不能为空!");
			password.focus();
			return false;
		}
		//帐号校验
		doverify();
		if(vResult){
 		return true;
		}else{
			return false;
		}
	}
</script>

测试,我们点击一个用户进行“编辑”操作,我们故意把它的账户名“jack”改为已经被注册的“Aim”:

发现不能提交,所以我们的编辑页面的校验也成功!

至此我们的所有校验工作已经完成。

转载请注明出处:http://blog.csdn.net/acmman/article/details/49420837

时间: 2024-11-03 04:51:10

【SSH项目实战】国税协同平台-8.户帐号唯一性校验的相关文章

【SSH项目实战】国税协同平台-1.项目介绍

项目介绍 1.1项目背景 国税协同办公平台包括了行政管理.后勤服务.在线学习.纳税服务.我的空间等几个子系统:我们本次主要的开发功能是纳税服务子系统的部分模块和基于纳税服务子系统信息的个人工作台首页.纳税服务子系统是办税PC前端或移动端的后台管理系统,主要包括的功能有系统角色管理.用户管理.信息发布管理.投诉受理.纳税咨询.易告知.服务预约.服务调查等模块. 系统的主界面: 我们要做的模块界面: 1.2项目前期 项目前期:一般是由客户经理从客户那边了解到有关该项目的招标信息,然后开发公司再组织竞

【SSH项目实战】国税协同平台-14.系统、子系统首页&amp;amp;登录功能1

我们做完了用户与角色的分配,在设置用户在相应的角色下的操作之前,我们先完成用户的登录功能. 首先,我们先加载我们的系统的首页和子首页.很简单,就是转发到一个jsp页面而已,我们先写一个HomeAction来设置跳转功能: package cn.edu.hpu.tax.core.action; import com.opensymphony.xwork2.ActionSupport; public class HomeAction extends ActionSupport{ //跳转到首页 pu

【SSH项目实战】国税协同平台-4.用户管理需求分析&amp;amp;CRUD方法1

上次我们完成了日志模块的配置和基础增删改查类,下面我们根据用户的需求来正式开发项目的业务模块. 下面我们主要来开发系统用户管理的模块 我们有用户的功能说明书,打开功能说明书来看看这个模块需要什么功能: 功能说明 用户管理:可以根据用户名查询系统用户:在页面中点击"新增"可以添加用户.点击删除可以批量删除选中的用户."导出"则导出所有的用户列表到excel文件中并弹出下载提示框给用户下载:"导入"将需要用户将本地的用户列表按照一定格式将excel中

微信公众平台将对帐号分类 新版增支付功能

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 新浪科技讯 7月3日下午消息,腾讯合作伙伴大会今日在北京国家会议中心召开,期间微信产品部助理总经理曾鸣透露,新版微信公众账号将分为订阅号和服务号,而即将推出的微信5.0版本中也将确认增加微信支付的功能. 此前腾讯已经透露将修改微信公众平台政策的信息,此次曾鸣进一步解释了微信公众平台的调整细节.据介绍,新版公众账号将实现分类,分成订阅号和服务号

【SSH项目实战】国税协同平台-3.资源文件分类&amp;amp;log4j&amp;amp;抽取BaseAction

上次我们搭建了SSH框架的环境,然后做了单元测试,下面我们继续来完善我们工厂的准备工作. 3.1资源文件分类 (1)将配置文件归类到新建config文件夹: (2)源代码目录按照功能模块进行划分:cn.edu.hpu.子系统.功能模块.* (3)Jsp放置到WEB-INF目录下: (4)其它: 新建一个test源文件架(Source Folder),我们把上次所有测试的代码全部移入test文件夹下,然后专门为配置文件创建一个conf源文件夹,将配置文件移入,然后src中先建立一个包准备放新写的代

【SSH项目实战】国税协同平台-31.我要投诉功能1

我们之前完成了投诉回复和保存功能,这次我们将要完成历史受理信息的显示 以及数据回显功能,当然还有用户编写投诉信息的入口,我们这次继续. 可以注意到,在deilUI.jsp上我们之前的投诉人信息显示,不管是匿名还是不匿名,投诉人的姓名.手机号码都是显示出来的: <tr> <td class="tdBg">投诉人姓名:</td> <td><s:property value="complain.compName"/&g

【SSH项目实战】国税协同平台-2.环境搭建和整合

框架整合 2.1新建数据库及web项目 2.1.1创建itcastTax数据库 -- 创建数据库 CREATE DATABASE itcastTax DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 我们使用的是Mysql数据库 2.1.2新建web项目 新建工作空间指定项目编码(或工作空间编码)为utf-8,再建 web project,配置buildpath 添加jstl的jar包和mysql驱动包:javax.servlet.jsp.j

【SSH项目实战】国税协同平台-33.quartz&amp;amp;SimpleTrigge

在我们"投诉管理"和"我要投诉"这两个模块完成之后,我们要做一个"自动投诉受理"功能. 我们来回顾一下"自动投诉受理"功能的需求分析: 自动投诉受理:在每个月月底最后一天对本月之前的投诉进行自动处理:将投诉信息的状态改为已失效.在后台管理中不能对该类型投诉进行回复. 自动投诉受理是在一定时间内自动的调度任务执行投诉状态的更新:那么需要使用任务调度,常见的任务调度有Jdk 的Timer 以及 quartz任务调度框架等.在spr

【SSH项目实战】国税协同平台-7.POI导入用户列表文件

上次我们使用POI技术完成了用户列表的打印工作,下面我们来完成用户列表Excel文件的导入. 我们要导入这个Excel文件到我们的系统中: 确切的说,是我们要将excel中的数据导入到数据库中保存起来 我们的操作过程: 1.获取excel文件 2.导入 2.1.读取工作簿 2.2.读取工作表 2.3.读取行 2.4.读取单元格 2.5.保存用户 下面我们来进行具体的实现工作 我们在用户列表的jsp页面中可以看到还有一个"导出"的按钮, <input type="butt