纳税服务系统【用户模块之用户唯一性校验】

2023-11-06 21:50

本文主要是介绍纳税服务系统【用户模块之用户唯一性校验】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

前三篇博文已经基本完成了用户模块的功能了,本篇是对其进行补充…主要完成用户唯一性校验的问题

我们发现:在新增或编辑页面的时候用户的账号是可以重复的,这是不符合我们的逻辑的。
这里写图片描述

当用户新增账号的时候,如果该账号已经存在了,就应该告诉用户该账号重复,不能使用该账号。

分析

用户在填写完账户的时候,就应该去做校验了。【使用AJAX】

校验的工作是什么呢????其实就是去查找数据库有没有对应的账户记录,如果有,那么就告诉用户存在了。如果没有,就没问题了。

上面已经说了有两处需要校验用户唯一性的问题:

  • 新增页面
  • 修改页面

新增页面和修改页面是有不同的处理方案的,因为在修改页面时,如果用户不修改账户,该用户的账户本来就存在了。因此我们要排除该用户的当前账户相同的问题,其实也很简单。

  • 在修改页面时是需要id传递过去的,而新增用户是不需要的。在查询数据库的时候,看看有没有id,如果有id就多一个条件即可!

前台使用AJAX处理

为账户的输入框添加事件

当账户的输入框修改时,就去数据库查询有没有相同的账户名字。

值得注意的是:本来我是在控件上添加一个id,使用Jquery得到id所在的控件,然后绑定事件,但是用不了。

所以,我只能在控件上绑定一个静态方法了

<tr><td class="tdBg" width="200px">帐号:</td><td><s:textfield id="userAccount" name="user.account" onchange="doVerify()"/></td></tr>

把账号的值传递给服务器,接受服务器返回的值

function doVerify() {//得到输入的值var account = $("#userAccount").val();$.ajax({type: "post",url: "${basePath}user/user_doVerify.action",data:{"user.account" :account},success:function (backdata) {alert(backdata);}});}

编写Dao方法

我们使用的是Hibernate,编写的HQL语句是FROM 实体,并不是”SELECT * FROM….. “

//因为我们不是在查id,因此是不能保证只有一个User对象的,即使在AJAX已经做了检查。因此返回值是个List集合List<User> findAccount(String id, String account);
@Overridepublic List<User> findAccount(String id, String account) {String hql = "FROM User WHERE account = ? ";//判断有没有id,如果有id,多加个条件【本账户不算】if (StringUtils.isNotBlank(id)) {hql = hql + "  AND id!=?";}Query query = getSession().createQuery(hql);query.setParameter(0, account);if (StringUtils.isNotBlank(id)) {query.setParameter(1, id);}List list = query.list();return list;}

Service调用Dao

List<User> findAccount(String id, String account);
    @Overridepublic List<User> findAccount(String id, String account) {return userDaoImpl.findAccount(id, account);}

Action处理

由于经常要判断传递过来的数据时候为null,是否为”“,我们使用StringUtils来进行判断:

    /************账户一次性校验*************************/public void doVerify() {try {//默认不存在String exist = "false";//判断账户是否为空,已经用户输入的数据。【我们使用StringUtils这个类来判断】//isNotBlank封装了不为null和不为""if (user != null && StringUtils.isNotBlank(user.getAccount())) {List<User> list = userServiceImpl.findAccount(user.getId(), user.getAccount());//如果查询到数据,那么说明该账户已经存在了。if (list != null && list.size() > 0) {exist = "true";}}HttpServletResponse response = ServletActionContext.getResponse();response.setContentType("text/html");ServletOutputStream outputStream = response.getOutputStream();outputStream.write(exist.getBytes());outputStream.close();} catch (IOException e) {e.printStackTrace();}}

前台提示

<script type="text/javascript">function doVerify() {//得到输入的值var account = $("#userAccount").val();$.ajax({type: "post",url: "${basePath}user/user_doVerify.action",data:{"user.account" :account},success:function (backdata) {//当存在的时候,告诉用户该账户已经存在了。if(backdata=="true") {alert("该账户已经存在了!请用别的账户");//定焦$("#userAccount").focus();}else {}}});}</script>

效果:

这里写图片描述


完善

上面只是完成了校验用户名是否唯一的功能,但是如果用户不听我的劝告,照样去提交表单,还是可以完成的。

于是在提交表单的时候要判断是否合法才能让用户提交:

把submit按钮改成是button,提供单击事件

   <input type="button" class="btnB2" value="保存" onclick="doSubmit()" />
    <script type="text/javascript">var Vresult = true;function doVerify() {//得到输入的值var account = $("#userAccount").val();$.ajax({type: "post",url: "${basePath}user/user_doVerify.action",async:false,data:{"user.account" :account},success:function (backdata) {//当存在的时候,告诉用户该账户已经存在了。if(backdata=="true") {alert("该账户已经存在了!请用别的账户");//定焦$("#userAccount").focus();Vresult = false;}else {Vresult = true;}}});}function doSubmit() {//在提交之前执行验证,但是验证又是异步的,因此要把异步改成同步doVerify();//判断能否提交表单if(Vresult) {document.forms[0].submit();}}</script>

editUI

在editUI上唯一区别就是需要把id传递过去给服务器端。


data: {"user.account": account, "user.id": "${user.id}"},

效果:

这里写图片描述


这篇关于纳税服务系统【用户模块之用户唯一性校验】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/359241

相关文章

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中