继续完善剩下的功能。中间空了两天没有写博客,这次一次性都完成吧。

一、批量删除

1、首先,前端中处理选择复选框进行删除的响应事件
function deleteSelectedUser() {var selectedCount = $("input[type=checkbox]:checked").length;// alert(selectedCount);if(selectedCount == 0) {alert("请至少选中一个进行删除");return;}if(confirm("确定要删除这些数据吗?")) {// 将选中的id写进数组中var idList = new Array();$("input[type=checkbox]:checked").each(function () {idList.push($(this).val());});alert(idList);// 将id列表传给服务器 ajax$.ajax({type:"post",url:"${pageContext.request.contextPath}/user/deleteSelectedUser.do",data:{idList:idList.toString()},// ajax可传递String和json,不能直接传递对象success:function () {alert("删除成功");location.reload();},error:function() {alert("删除失败");}})}}

这里就用到了jquery的一些知识,非常容易理解,主要ajax中参数的设置,data我这里使用的String格式,后面我们可以使用json更加方便。

2、控制层
@RequestMapping("/deleteSelectedUser.do")public String deleteSelectedUser(String idList) {String[] strs = idList.split(",");List<Integer> ids = new ArrayList<>();// for-in循环for (String s : strs) {ids.add(Integer.parseInt(s));}iUserService.deleteSelectedUser(ids);return "redirect:/user/findAll.do";}

由于从前端传递的参数时String格式,所以首先需要进行数据处理,然后传递给服务层,Dao层进行删除。

二、搜索实现

1、前端搜索框
<form action="${pageContext.request.contextPath}/user/findAll.do?type=1" method="post"><div class="col-md-3 data"><input type="text" class="form-control input-sm" placeholder="搜索" name="username" value="${sessionScope.username}"></div><button class="btn bg-maroon" type="submit">搜索</button></form>

每当点击搜索按钮,搜需要在url中添加参数type=1,后端判断需要返回那些数据。同时form表单提交的方式是post而非get,原因请参考底部链接。

2、控制层
@RequestMapping("/findAll.do")public ModelAndView findAllByUser(@RequestParam(defaultValue = "1")int  currentPage, @RequestParam(defaultValue = "0")int type,String username, HttpSession session) {ModelAndView mv = new ModelAndView();if (type == 1) {session.setAttribute("username", username);}else {session.setAttribute("username", null);System.out.println("点击下一页的type"+type);}PageInfo<User> pageInfo = iUserService.findByPage(currentPage, username);System.out.println(pageInfo);mv.addObject("pageInfo", pageInfo);mv.setViewName("/pages/dataList");return mv;}

三、过滤器实现

这里filter是用来通过判断session中是否包含用户登陆信息,以及url中是否为登陆,来进行url的放行。

1、web.xml配置
<!--  过滤器--><filter><filter-name>loginfilter</filter-name><filter-class>com.zhongruan.filter.LoginFilter</filter-class></filter><filter-mapping><filter-name>loginfilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping>

上面配置中,只对.do后缀的url进行筛选过滤

2、loginFilter类
public class LoginFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("过滤器初始化");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("过滤器创建========");// 得到requestHttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;// 得到sessionHttpSession session = request.getSession();// 得到user对象User user = (User)session.getAttribute("user");// 获得urlString url = request.getRequestURI();// 判断session中是否存在,url中是否包含login.doif(user == null && url.indexOf("login.do") == -1 && url.indexOf("checkLogin.do") == -1) {  //未登录并且想访问其他页面System.out.println(user);System.out.println("index="+url.indexOf("login.do"));System.out.println("用户未登录");response.sendRedirect(request.getContextPath()+ "user/login.do");}else {  //已登录或者在登录界面,那就 放行System.out.println(user);System.out.println("index="+url.indexOf("login.do"));System.out.println("用户已登录");filterChain.doFilter(servletRequest,servletResponse);}}@Overridepublic void destroy() {System.out.println("过滤器销毁");}
}

四、权限管理

为用户设置不同的权限,从而使用户可以进行不同层级的操作。

1、数据库的设计

这里有两种思路,第一种就是直接在原来的user用户表中添加一列role,这样会存在数据冗余等完整性的问题,这里并不推荐大家这样做,我们可以使用下面第二种方法,先设计一个能够包含所有权限的role表,然后创建一个user和role之间的关联表userRole,这样可以解决完整性等问题。

2、Bean,Dao层,Service层创建

3、用户权限修改

系统通过判断该用户是用户管理员与否来确定是否增加该功能。

<c:forEach items="${allRole}" var="role"><tr><td><c:when test="${role.roleId == 2}"><input name="roleId" type="checkbox" value="${role.roleId}" checked="checked" onclick="return false"></c:when><c:otherwise><input name="roleId" type="checkbox" value="${role.roleId}"></c:otherwise></c:choose></td><td>${role.roleId}</td><td>${role.roleName }</td><td>${role.roleDesc}</td></tr></c:forEach>

上面式权限修改界面的一部分,主要是用来显示该用户的权限列表。

4、控制层
@RequestMapping("/updateRole.do")public String updateRole(String roleList, int userId) {String[] strs = roleList.split(",");List<Integer> ids = new ArrayList<>();for( String str : strs) {ids.add( Integer.parseInt(str));}int result = iRoleService.updateUserRole(userId, ids);return "redirect:/user/findAll.do";}
5、Service层逻辑
@Overridepublic int updateUserRole(int userId, List<Integer> listRoleId) {// 将新的userRole对象写进到数据库中UserRole userRole = new UserRole();userRole.setUserId(userId);// 先获取用户原来的所有权限List<Integer> oldListRoleId = iRoleDao.getRoleById(userId);// 先用新权限减去旧权限,然后将新的写进数据库for( int i = 0; i < listRoleId.size(); i++) {if(!oldListRoleId.contains(listRoleId.get(i))) {userRole.setRoleId(listRoleId.get(i));iRoleDao.addUserRole(userRole);  // 新权限就加入数据库中}}// 然后用旧权限减去新权限,将没有的从数据库中删去for(int i = 0; i<oldListRoleId.size(); i++) {if( !listRoleId.contains(oldListRoleId.get(i))) {userRole.setRoleId(oldListRoleId.get(i));iRoleDao.deleteUserRole(userRole);}}return 0;}

参考

1、form表单Get方式提交时,action中带参数传递不了
2、EL表达式详解
3、javax.el.PropertyNotFoundException: 类型XXX上找不到属性XXX的解决方案

这里我需要特别强调一下第三个链接,我在Bean中命名了一个叫isBorrowed的属性,我在将B小写为b后,仍然会报一样的错误,结果我想起来那个链接中写着,EL有自己的命名规范,所以我当时认为is可能不合理,没想到,这是这样。虽然不清楚他的原理,但这告诫我们,最好在属性中也不要出现包含关键字的词。

4、设置checkbox复选框的只读效果

中软实习---批量删除和搜索,过滤器和权限管理---7.24-7.26相关推荐

  1. 中软实习培训记录十(0730)

    中软实习培训记录十(0730) 删除功能 删除功能实现 删除功能演示 用户的新闻浏览系统 界面设计 主页新闻列表实现 主页新闻列表显示 主页类别列表实现 主页类别列表显示 主页标签列表实现 主页标签列 ...

  2. 中软实习培训记录八(0728)

    中软实习培训记录八(0728) 分类新增 设计思路 新增功能实现 新增功能演示 分类删除 删除功能实现 删除功能演示 分类修改 设计思路 修改功能实现 修改功能演示 新模块--标签 标签实体类设计 具 ...

  3. 中软实习培训记录三(0722)

    中软实习培训记录三(0722) SSM项目概述 SSM项目Demo实现过程--登陆 SSM项目Demo扩展--用户查看 SSM项目Demo扩展--用户添加 SSM项目Demo扩展--用户删除 SSM项 ...

  4. 中软实习培训记录十二(0802)

    中软实习培训记录十二(0802) 归档功能实现 归档功能演示 异常事件处理 演示 拦截器 介绍 构建拦截器 在上周我们已经完成了新闻的后台管理部分以及用户浏览界面的分类.标签和主页,今天来实现界面上的 ...

  5. 中软实习首日培训记录

    中软实习首日培训记录 一.软件安装 二.SSM项目初步学习 MyBits简介 Spring:IoC控制反转 MVC简介 三. 创建maven项目 四.以小的程序入手熟悉数据库的操作 方法二 一.软件安 ...

  6. 中软实习培训记录二(0721)

    中软实习培训记录二(0721) 一.Tomcat的下载安装 二.Java Enterprise --登陆跳转 demo 一.Tomcat的下载安装 1.进入Apache Tomcat官网,选择你需要的 ...

  7. MyBatis使用in进行列表中数据的批量删除

    MyBatis使用in 准备 使用in进行列表中数据的批量删除 准备 数据库表 bean 使用in进行列表中数据的批量删除 以删除age in (20,43,99)的数据项为例.很明显此时不可以使用# ...

  8. 怎样把计算机里的图片快速删除,如何批量删除重复图片 电脑中相同图片批量删除的方法...

    因为工作需要,在电脑上存了大量的图片,有些是从网站上批量下载的,这里面难免会有许多重复的,如果数量少的话,一张张地看,再一张张的删除重复图片那还行得通.可是当你一个文件夹里就有几千上万张的图片时,再用 ...

  9. 中软实习培训记录十一(0731)

    中软实习培训记录十一(0731) 新闻详情页内的评论功能 实体类设计 评论展示部分 定义评论功能接口 定义Repository Controller处理 评论保存发布部分 定义评论功能接口 Contr ...

最新文章

  1. elasticsearch系列(七)java定义score
  2. python画轨迹曲线-python 自动轨迹绘制的实例代码
  3. MySQL利用xtrabackup进行增量备份详细过程汇总
  4. 如何用python爬虫薅羊毛_不会Python编程也能用的,薅羊毛软件使用说明
  5. mysql报错排查总结
  6. python return用法_Python 为什么没有 void 关键字?
  7. java vote_vote投票系统java jsp mysql
  8. linux的命令窗口,(翻译)Linux命令行(二)
  9. Nginx 安装与启动
  10. django系列3.3--CBV 和 FBV
  11. 2019-07-11 nginx 下网页显示乱码
  12. 细说OSI七层协议模型及OSI参考模型中的数据封装过程?
  13. 基于springboot vue h5 手机商城源码
  14. google hacking 搜索技巧
  15. win7电脑桌面背景异常
  16. Indilinx主控固态量产成功修复步骤
  17. 解决windows指纹解锁过一段时间就使用不了、需要重新录入指纹才可以使用的问题
  18. 什么叫SOC-新能源充电桩
  19. LaTeX排版(二)
  20. Notifiction

热门文章

  1. 关于neo4j导入Protégé导出的owl文件遇到的问题
  2. 24届近3年清华大学自动化考研院校分析
  3. AWStats日志分析之系统的部署
  4. 14.i18n在vue项目中使用(国际化)
  5. 第六节 etc/passwd 、etc/shadow 、 useradd 、 groupadd
  6. 排名前10的十大人力资源管理系统(EHR系统品牌)
  7. [COGS1000]伊吹萃香 最短路
  8. 一个简单的木马程序分析
  9. 校园安防智能视频行为分析预警系统解决方案
  10. PhotoShop将钢笔的路径转换为画笔