zoukankan      html  css  js  c++  java
  • 尚筹网项目第三天2020-03-2416:58:06

    本笔记大多来源于尚硅谷【封捷老师讲的尚筹网项目】

    尚硅谷尚筹网项目视频教程
    下载链接:https://pan.baidu.com/s/1WOLG7b4yHkQfSMu3fMsOBA 
    提取码:s5gw

    管理员增、删、改功能

    1、管理员之删除功能

    说明:本功能仅是练习技术,实际开发中需要考虑:当前删除的是不是本人等业务场景,需要根据具体业务做具体处理

    思路:

    代码实现:

    ①前端页面修改

    原:

    <button type="button" class="btn btn-danger btn-xs"><i class=" glyphicon glyphicon-remove"></i></button>

    现在:

    <a href="admin/del/${admin.id}/${requestScope.adminPage.pageNum}/${param.keyword}.html" class="btn btn-danger btn-xs"><i class=" glyphicon glyphicon-remove"></i></a>

    ②后台代码

    idea快捷键之打开实现类:ctrl+alt+鼠标点击【左键】

    handler:

    @RequestMapping("/admin/del/{id}/{pageNum}/{keyword}.html")
        public String delAdminById(
                @PathVariable("id") Integer id,
                @PathVariable("pageNum") Integer pageNum,
                @PathVariable("keyword") String keyword
        ){
            admainService.delAdminById(id);
            return "redirect:/admin/page.html?pageNum="+pageNum+"&keyword="+keyword;
        }

    service:

    @Override
        public void delAdminById(Integer id) {
            adminMapper.deleteByPrimaryKey(id);
        }

    2、管理员之添加功能

    思路:

    页面修改:

    原:

    <button type="button" class="btn btn-primary" style="float:right;" onclick="window.location.href='add.html'"><i class="glyphicon glyphicon-plus"></i> 新增</button>

    现在:

    <a href="admin/to/add.html" class="btn btn-primary" style="float:right;"><i class="glyphicon glyphicon-plus"></i> 新增</a>

    由于不涉及带数据,直接使用view-controller进行跳转

    <mvc:view-controller path="/admin/to/add.html" view-name="admin-add"/>

    创建添加页面:admin-add

    <%--
      Created by IntelliJ IDEA.
      User: 25017
      Date: 2020/3/24
      Time: 18:18
      To change this template use File | Settings | File Templates.
    --%>
    <%--
      Created by IntelliJ IDEA.
      User: 25017
      Date: 2020/3/23
      Time: 12:44
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    <!DOCTYPE html>
    <html lang="UTF-8">
    <%@include file="/WEB-INF/include-head.jsp" %>
    
    <body>
    
    <%@include file="/WEB-INF/include-nav.jsp" %>
    <div class="container-fluid">
        <div class="row">
            <%@include file="/WEB-INF/include-sidebar.jsp" %>
            <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
                <ol class="breadcrumb">
                    <!-- 面包屑 -->
                    <li><a href="admin/main.html">首页</a></li>
                    <li><a href="admin/page.html">数据列表</a></li>
                    <li class="active">新增</li>
                </ol>
                <div class="panel panel-default">
                    <div class="panel-heading">表单数据<div style="float:right;cursor:pointer;" data-toggle="modal" data-target="#myModal"><i class="glyphicon glyphicon-question-sign"></i></div></div>
                    <div class="panel-body">
                        <form action="admin/add.html" method="post" role="form">
                            <!-- 显示异常消息 -->
                            <p>${requestScope.exception.message}</p>
                            <div class="form-group">
                                <label for="exampleInputPassword1">登陆账号</label>
                                <input type="text" name="loginAcct" class="form-control" id="exampleInputPassword1" placeholder="请输入登陆账号">
                            </div>
                            <div class="form-group">
                                <label for="exampleInputPassword1">登陆密码</label>
                                <input type="text" name="userPswd" class="form-control" id="exampleInputPassword1" placeholder="请输入登陆账号">
                            </div>
                            <div class="form-group">
                                <label for="exampleInputPassword1">用户昵称</label>
                                <input type="text" name="userName" class="form-control" id="exampleInputPassword1" placeholder="请输入用户名称">
                            </div>
                            <div class="form-group">
                                <label for="exampleInputEmail1">邮箱地址</label>
                                <input type="email" name="email" class="form-control" id="exampleInputEmail1" placeholder="请输入邮箱地址">
                                <p class="help-block label label-warning">请输入合法的邮箱地址, 格式为: xxxx@xxxx.com</p>
                            </div>
                            <button type="submit" class="btn btn-success"><i class="glyphicon glyphicon-plus"></i> 新增</button>
                            <button type="reset" class="btn btn-danger"><i class="glyphicon glyphicon-refresh"></i> 重置</button>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
    
    </body>
    </html>

    给数据库表登陆账号添加唯一约束:

    ALTER TABLE `t_admin` 
    ADD UNIQUE INDEX (`login_acct`);

    注意:需要先保证表中该字段没有重复值【下面脚本如果能查询到值,应将符合条件的数据删除】:

    select *,count(1) from t_admin group by login_acct having count(login_acct) > 1

    自定义异常:

    package com.atguigu.crowd.exception;
    
    public class AddAdminException extends RuntimeException {
        public AddAdminException() {
            super();
        }
    
        public AddAdminException(String message) {
            super(message);
        }
    
        public AddAdminException(String message, Throwable cause) {
            super(message, cause);
        }
    
        public AddAdminException(Throwable cause) {
            super(cause);
        }
    
        protected AddAdminException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
            super(message, cause, enableSuppression, writableStackTrace);
        }
    }

    handler:

    @RequestMapping("admin/add.html")
        public String addAdmin(Admin admin){
            //执行添加操作
            admainService.addAdmin(admin);
            return "redirect:/admin/page.html?pageNum="+Integer.MAX_VALUE;
        }

    service:

    @Override
        public void addAdmin(Admin admin) {
            // 1、取得用户输入的密码
            String userPswd = admin.getUserPswd();
    
            // 2、将密码进行md5加密
            userPswd = CrowdUtil.md5(userPswd);
    
            // 3、将密码重新放入admin对象
            admin.setUserPswd(userPswd);
    
            // 4、获取当前时间
            Date now = new Date();
    
            // 5、将当前时间格式化
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String formatNowDate = simpleDateFormat.format(now);
    
            // 6、将当前时间放入admin对象
            admin.setCreateTime(formatNowDate);
    
            // 7、执行添加操作
            try {
                adminMapper.insert(admin);
            }catch (Exception e){
                logger.info(CrowdConstant.ADD_ADMIN_ERROR_MESSAGE);
                e.printStackTrace();
                throw new AddAdminException(CrowdConstant.ADD_ADMIN_ERROR_MESSAGE);
            }
    
    
        }

    3、管理员之修改功能

    思路:

    页面:

    原:

    <button type="button" class="btn btn-primary btn-xs"><i class=" glyphicon glyphicon-pencil"></i></button>

    现在:

    <a href="admin/update/${admin.id}.html" class="btn btn-primary btn-xs"><i class=" glyphicon glyphicon-pencil"></i></a>

    创建修改页面 admin-update:

    <%--
      Created by IntelliJ IDEA.
      User: 25017
      Date: 2020/3/24
      Time: 18:18
      To change this template use File | Settings | File Templates.
    --%>
    <%--
      Created by IntelliJ IDEA.
      User: 25017
      Date: 2020/3/23
      Time: 12:44
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    <!DOCTYPE html>
    <html lang="UTF-8">
    <%@include file="/WEB-INF/include-head.jsp" %>
    
    <body>
    
    <%@include file="/WEB-INF/include-nav.jsp" %>
    <div class="container-fluid">
        <div class="row">
            <%@include file="/WEB-INF/include-sidebar.jsp" %>
            <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
                <ol class="breadcrumb">
                    <li><a href="admin/main.html">首页</a></li>
                    <li><a href="admin/page.html">数据列表</a></li>
                    <li class="active">新增</li>
                </ol>
                <div class="panel panel-default">
                    <div class="panel-heading">表单数据<div style="float:right;cursor:pointer;" data-toggle="modal" data-target="#myModal"><i class="glyphicon glyphicon-question-sign"></i></div></div>
                    <div class="panel-body">
                        <form action="admin/update.html" method="post" role="form">
                            <input type="hidden" name="id" value="${admin.id}"/>
                            <div class="form-group">
                                <label for="exampleInputPassword1">登陆账号</label>
                                <input type="text" name="loginAcct" value="${admin.loginAcct}" class="form-control" id="exampleInputPassword1" placeholder="请输入登陆账号">
                            </div>
                            <div class="form-group">
                                <label for="exampleInputPassword1">用户昵称</label>
                                <input type="text" name="userName" value="${admin.userName}" class="form-control" id="exampleInputPassword1" placeholder="请输入用户名称">
                            </div>
                            <div class="form-group">
                                <label for="exampleInputEmail1">邮箱地址</label>
                                <input type="email" name="email" value="${admin.email}" class="form-control" id="exampleInputEmail1" placeholder="请输入邮箱地址">
                                <p class="help-block label label-warning">请输入合法的邮箱地址, 格式为: xxxx@xxxx.com</p>
                            </div>
                            <button type="submit" class="btn btn-success"><i class="glyphicon glyphicon-update"></i> 修改</button>
                            <button type="reset" class="btn btn-danger"><i class="glyphicon glyphicon-refresh"></i> 重置</button>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
    
    </body>
    </html>

    自定义异常:

    package com.atguigu.crowd.exception;
    
    public class UpdateAdminException extends RuntimeException {
        public UpdateAdminException() {
            super();
        }
    
        public UpdateAdminException(String message) {
            super(message);
        }
    
        public UpdateAdminException(String message, Throwable cause) {
            super(message, cause);
        }
    
        public UpdateAdminException(Throwable cause) {
            super(cause);
        }
    
        protected UpdateAdminException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
            super(message, cause, enableSuppression, writableStackTrace);
        }
    }

    解析异常:

    package com.atguigu.crowd.mvc.config;
    
    
    import com.atguigu.crowd.exception.AccessForbiddenException;
    import com.atguigu.crowd.exception.AddAdminException;
    import com.atguigu.crowd.exception.LoginFailedException;
    import com.atguigu.crowd.exception.UpdateAdminException;
    import com.atguigu.crowd.util.CrowdUtil;
    import com.atguigu.crowd.util.ResultEntity;
    import com.google.gson.Gson;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @ControllerAdvice
    public class CrowdExceptionResolver {
    
        @ExceptionHandler(value = UpdateAdminException.class)
        public ModelAndView resolveUpdateAdminException(
                UpdateAdminException exception,
                HttpServletRequest request,
                HttpServletResponse response ) throws IOException {
            String viewName = "system-error";
            return commonResolve(viewName, exception, request, response);
        }
    
        @ExceptionHandler(value = AddAdminException.class)
        public ModelAndView resolveAddAdminException(
                AddAdminException exception,
                HttpServletRequest request,
                HttpServletResponse response ) throws IOException {
            String viewName = "admin-add";
            return commonResolve(viewName, exception, request, response);
        }
    
        @ExceptionHandler(value = AccessForbiddenException.class)
        public ModelAndView resolveAccessForbiddenExceptionException(
                AccessForbiddenException exception,
                HttpServletRequest request,
                HttpServletResponse response ) throws IOException {
            String viewName = "admin-login";
            return commonResolve(viewName, exception, request, response);
        }
        @ExceptionHandler(value = LoginFailedException.class)
        public ModelAndView resolveLoginFailedException(
                LoginFailedException exception,
                HttpServletRequest request,
                HttpServletResponse response ) throws IOException {
            String viewName = "admin-login";
            return commonResolve(viewName, exception, request, response);
        }
        @ExceptionHandler(value = ArithmeticException.class)
        public ModelAndView resolveMathException(
                ArithmeticException exception,
                HttpServletRequest request,
                HttpServletResponse response
        ) throws IOException {
    
            String viewName = "system-error";
    
            return commonResolve(viewName, exception, request, response);
        }
        @ExceptionHandler(value = NullPointerException.class)
        public ModelAndView resolveNullPointerException(
                NullPointerException exception,
                HttpServletRequest request,
                HttpServletResponse response) throws IOException {
    
            String viewName = "system-error";
    
            return commonResolve(viewName, exception, request, response);
        }
    
    
        // @ExceptionHandler将一个具体的异常类型和一个方法关联起来
        private ModelAndView commonResolve(
    
                // 异常处理完成后要去的页面
                String viewName,
    
                // 实际捕获到的异常类型
                Exception exception,
    
                // 当前请求对象
                HttpServletRequest request,
    
                // 当前响应对象
                HttpServletResponse response) throws IOException {
    
            // 1.判断当前请求类型
            boolean judgeResult = CrowdUtil.judgeRequestType(request);
    
            // 2.如果是Ajax请求
            if(judgeResult) {
    
                // 3.创建ResultEntity对象
                ResultEntity<Object> resultEntity = ResultEntity.failed(exception.getMessage());
    
                // 4.创建Gson对象
                Gson gson = new Gson();
    
                // 5.将ResultEntity对象转换为JSON字符串
                String json = gson.toJson(resultEntity);
    
                // 6.将JSON字符串作为响应体返回给浏览器
                response.getWriter().write(json);
    
                // 7.由于上面已经通过原生的response对象返回了响应,所以不提供ModelAndView对象
                return null;
            }
    
            // 8.如果不是Ajax请求则创建ModelAndView对象
            ModelAndView modelAndView = new ModelAndView();
    
            // 9.将Exception对象存入模型
            modelAndView.addObject("exception", exception);
    
            // 10.设置对应的视图名称
            modelAndView.setViewName(viewName);
    
            // 11.返回modelAndView对象
            return modelAndView;
        }
    }

    统一的出错页面:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <!DOCTYPE html>
    <html lang="UTF-8">
    <%@include file="/WEB-INF/include-head.jsp" %>
    
    <body>
    
    <%@include file="/WEB-INF/include-nav.jsp" %>
    
    <!-- 从请求域取出Exception对象,再进一步访问message属性就能够显示错误消息 -->
    <div class="container" style="text-align: center;">
        <h3>系统错误信息页面</h3>
        <h4>${requestScope.exception.message }</h4>
        <button style=" 300px;margin: 0px auto 0px auto;" class="btn btn-lg btn-success btn-block">返回刚才页面</button>
    </div>
    
    <script type="text/javascript">
        $(function () {
            $("button").click(function () {
                // 调用 back()方法类似于点击浏览器的后退按钮
                window.history.back();
            });
        });
    </script>
    </body>
    </html>

    handler:【保证中文被解析】

    // 执行修改方法
    @RequestMapping("/admin/update.html")
        public String updateAdmin(Admin admin, RedirectAttributes attributes){
            admainService.updateAdminById(admin);
            attributes.addAttribute("keyword",admin.getLoginAcct());
            return "redirect:/admin/page.html";
        }
    
    // 去往修改页面
        @RequestMapping("/admin/update/{id}.html")
        public String toUpdateAdminPage(
                @PathVariable("id") Integer id,
                ModelMap modelMap
        ){
            Admin admin = admainService.getAdminById(id);
            modelMap.addAttribute("admin",admin);
            return "admin-update";
        }

    service:

    // 根据id查询
    @Override
        public Admin getAdminById(Integer id) {
            Admin admin = adminMapper.selectByPrimaryKey(id);
            return admin;
        }
    // 有选择的修改
        @Override
        public void updateAdminById(Admin admin) {
            // 执行修改方法:有选择的修改
            try{
                adminMapper.updateByPrimaryKeySelective(admin);
            }catch (Exception e) {
                logger.info(CrowdConstant.ADMIN_UPDATE_ERROR_MESSAGE);
                e.printStackTrace();
                throw new UpdateAdminException(CrowdConstant.ADMIN_UPDATE_ERROR_MESSAGE);
            }
        }
  • 相关阅读:
    使用 Node.js 实现简单的 Webhook
    乐橙平台大华监控Android端实时预览播放
    解决ScrollView嵌套百度地图滑动冲突
    解决ViewPager与百度地图滑动冲突
    SpringBoot+MybatisPlus+MySql 自动生成代码 自动分页
    SpringBoot+Mybatis+MySql 自动生成代码 自动分页
    Android MVP框架实现登录案例
    Android属性动画-简单实例
    SpringBoot2+Druid+JdbcTemplate+MySql实现增删改查
    SpringBoot2+Druid+MyBatis+MySql实现增删改查
  • 原文地址:https://www.cnblogs.com/lxw-all/p/12562208.html
Copyright © 2011-2022 走看看