SSM——CRUD增删改查的详细使用(ajax技术)



一、项目准备

(1)界面展示

http://localhost:8080/ssm03/deptv2/listUI

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)复制工程

【源代码:基础的增删改查(部门)

在原有代码基础上,修改项目名称为ssm03_crud--ajax,添加新的技术手段,模块标签
在这里插入图片描述

(3)Controller方法返回值类型Object

  • Controller方法返回类型可以有几种?
    ModelAndView
    void
    String
    Object
  • @ResponseBody
    调jackson库将Object转成json字符串返回
    如果没有依赖jackson库则,抛出异常
    HttpMessageNotWritableException: No converter found for return value of type: class java.util.ArrayList
  • 依赖配置jackson库

pom.xml

  <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.11.3</version>
      </dependency>

(4)Controller方法返回Result

  • src\main\java\com\smp\domain\Result.java
public class Result {
    
    
    //编码 404 200
    private int code;
    //提示信息
    private String msg;
    //数据
    private Object data;

    public static Result init(int code, String msg, Object data){
    
    
        Result result=new Result(code,msg,data);
        return result;
    }
    public Result() {
    
    
    }

    public Result(int code, String msg, Object data) {
    
    
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    @Override
    public String toString() {
    
    
        return "Result{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }

    public int getCode() {
    
    
        return code;
    }

    public void setCode(int code) {
    
    
        this.code = code;
    }

    public String getMsg() {
    
    
        return msg;
    }

    public void setMsg(String msg) {
    
    
        this.msg = msg;
    }

    public Object getData() {
    
    
        return data;
    }

    public void setData(Object data) {
    
    
        this.data = data;
    }
}

  • (src\main\java\com\smp\controller\DepartmentV2Controller.java)
@Controller
@RequestMapping("/deptv2")
public class DepartmentV2Controller {
    
    
    private static final Logger l= LoggerFactory.getLogger(DepartmentV2Controller.class);
    @Autowired
    //controller调用service层
    private IDepartmentService departmentService;
    /*@RequestMapping(path="/xx",method=  GET   POST代表请求页面)
     public 返回值类型 方法名(参数){ //页面提交过来的请求参数
        //..
        返回值类型决定返回给浏览器的内容
    }
     */
    //返回list界面
    @RequestMapping(path = "/listUI",method = RequestMethod.GET)
    public String listUI(){
    
    

        return "list_depts";
    }
    //地址带UI表示打开界面,不代表是返回数据
    @RequestMapping(path = "/list",method = RequestMethod.GET)
    //将list调jackson转成json字符串
    public @ResponseBody Object list(){
    
    
        //业务逻辑  调用查找所有部门的方法
        List<Department> list=departmentService.findAllDepartments();
        //返回对象需要被转成json字符串
        return Result.init(200,"",list);
    }
}

二、ajax

(1) ajax介绍

  • ajax是什么
    Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML)
  • ajax有什么特点
    通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。即可以在不重新加载整个网页的情况下,对网页的某部分进行更新
    ajax不需要重定向或者请求转发
  • 具体编程内容
    js 发送请求
    js 接收结果
    js 更新页面

(2)Jquery实现Ajax

  • (1)导入jquery库
    【链接:jquery
    在这里插入图片描述
<%
    pageContext.setAttribute("path", request.getContextPath());
%>
 <%--引入--%>
    <script type="text/javascript" src="${path}/js/jquery-1.11.0.min.js"></script>
  • (2)代码编写
    js 发送请求 $.get $.post serialize()
    js 接收结果 function(data){…}
    js 更新页面 $(id值) html()

三、增删改查

在这里插入图片描述

(1)实现部门列表界面

/*实现部门列表界面*/
        $(function () {
    
    
                //页面加载成功
                //1:js发送请求
                $.get('${path}/deptv2/list', function (result) {
    
    
                    //2:js接收结果
                    console.info("result=" + result)
                    //{"code":200,"msg":"","data":[{"did":1,"dname":"JAVA"},{"did":2,"dname":"测试"},{"did":3,"dname":"最牛部门33"}]}

                    //定义表格的内容
                    var trs = ''
                    //拼接表头
                    trs += ' <tr>\n' +
                        '        <td>编号</td>\n' +
                        '        <td>部门名称</td>\n' +
                        '        <td>管理</td>\n' +
                        '\n' +
                        '    </tr>'
                    if (200 == result.code) {
    
    
                        var items = result.data;
                        //3:js更新页面
                        for (var i = 0; i < items.length; i++) {
    
    
                            var dept = items[i]
                            console.info(dept)
                            trs += ' <tr>\n' +
                                '        <td>' + dept.did + '</td>\n' +
                                '        <td>' + dept.dname + '</td>\n' +
                                '        <td><a href="javascript:deleteById('+dept.did+')">删除</a>|<a href="javascript:updateUI('+dept.did+')">修改</a></td>\n' +
                                '\n' +
                                '    </tr>'
                        }//end for

                        $('#table').html(trs)
                    }

                }, 'json')  //参1 地址 参2 处理函数  参3 数据类型


            })

(2)内容在同一页面

/*内容在同一页面*/
        function switchDiv(part) {
    
    
            //隐藏内容
            $('#addDiv').css("display","none")
            $('#listDiv').css("display","none")
            $('#editDiv').css("display","none")
            if(1 == part){
    
    //添加页面
                $('#addDiv').css("display","block")
                $('#add_dname').val('')
            }else if(2 == part){
    
    //列表页面
                $('#listDiv').css("display","block")
            }else if(3 == part){
    
    //编辑页面
                $('#editDiv').css("display","block")
            }
        }
    <%--内容在同一页面结束--%>

(3)刷新界面

/*刷新界面*/
        function refreshTable() {
    
    
            //页面加载成功
            $('#table').html('')
            //1:js发送请求
            $.get('${path}/deptv2/list', function (result) {
    
    
                //2:js接收结果
                console.info("result=" + result)
                //定义表格的内容
                var trs = ''
                //拼接表头
                trs += ' <tr>\n' +
                    '        <td>编号</td>\n' +
                    '        <td>部门名称</td>\n' +
                    '        <td>管理</td>\n' +
                    '\n' +
                    '    </tr>'
                if (200 == result.code) {
    
    
                    var items = result.data;
                    //3:js更新页面
                    for (var i = 0; i < items.length; i++) {
    
    
                        var dept = items[i]
                        console.info(dept)
                        trs += ' <tr>\n' +
                            '        <td>' + dept.did + '</td>\n' +
                            '        <td>' + dept.dname + '</td>\n' +
                            '        <td><a href="javascript:deleteById(' + dept.did + ')">删除 | </a><a href="javascript:updateUI(' + dept.did + ')">修改</a></td>\n' +
                            '\n' +
                            '    </tr>'
                    }//end for

                    $('#table').html(trs)
                }

            }, 'json')  //参1 地址 参2 处理函数  参3 数据类型
        }
    <%--刷新界面结束--%>

(4)删除

  • (src\main\java\com\smp\controller\DepartmentV2Controller.java)
//删除
    @RequestMapping(path = "/delete",method = RequestMethod.GET)
    public @ResponseBody Object delete(Integer did){
    
    
        //获取did,执行对该记录的删除
        l.info("delete did="+did);
        try {
    
    
            departmentService.deleteDepartmentById(did);
            return Result.init(200,"删除成功",null);
        }catch (Exception e){
    
    
            e.printStackTrace();
        }
        return Result.init(-200,"删除失败",null);
    }
  
  • src\main\webapp\WEB-INF\pages\list_depts.jsp
 /*删除指定id的部门*/
       function deleteById(did) {
    
    
            $.get('${path}/deptv2/delete?did=' + did, function (result) {
    
    
                console.info(result)
                if (200 == result.code) {
    
    
                    alert(result.msg)
                    //调用列表更新
                    refreshTable()
                } else {
    
    
                    alert(result.msg)
                }
            }, 'json')
        }

(5)添加

  • (src\main\java\com\smp\controller\DepartmentV2Controller.java)
    //保存一般是使用post提交
    @RequestMapping(path="/add",method = RequestMethod.POST)
    public @ResponseBody Object add(Department dept){
    
    
        l.info("add department="+dept);
        try {
    
    
            departmentService.saveDepartment(dept);
            return  Result.init(200,"添加成功",null);
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
        return  Result.init(-200,"添加失败",null);
    }
  • src\main\webapp\WEB-INF\pages\list_depts.jsp
/*添加请求*/
        $(function () {
    
    
            switchDiv(2)
            refreshTable()
            $('#btn_add').click(function () {
    
    
                //alter('btn_add')普通的表单提交
                var data = $('#add_form').serialize()
                $.post('${path}/deptv2/add', data, function (result) {
    
    
                    console.info(result)
                    //页面切换
                    switchDiv(2)
                    //重新加载列表
                    refreshTable()
                    alert(result.msg)
                }, 'json')
            })

        })
    <%--添加结束--%>
  • 前台表单
<div id="listDiv" style="display: block">
    <a href="javascript:switchDiv(1)">新增</a>
    <table border="1px" width="100%" id="table"></table>
</div>
<%--添加的表单--%>
<div id="addDiv">
    <h1>添加页面</h1>
    <form id="add_form">
        <input type="hidden" name="did"/><br/>
        <input type="text" name="dname" id="add_dname" placeholder="请添加部门"/><br/>
        <input id="btn_add" type="button" value="保存"/><br/>
    </form>
</div>

(6)修改

  • (src\main\java\com\smp\controller\DepartmentV2Controller.java)
    @RequestMapping(path = "/find",method = RequestMethod.GET)
    public @ResponseBody Object find(Integer did){
    
    
        //打印数据
        l.info("find did="+did);
        if(did!=null){
    
    
            //查询回显需要的数据
            Department dept=departmentService.findDepartmentById(did);
            if(dept!=null){
    
    
                //转成json返回界面
                return Result.init(200,null,dept);
            }
        }
        return Result.init(-200,"没有查询结果",null);
    }
    //更新
    @RequestMapping(path = "/update",method = RequestMethod.POST)
    @ResponseBody Object update(Department dept){
    
    
        l.info("update dept="+dept);
        try {
    
    
            departmentService.updateDepartmentById(dept);
            return Result.init(200,"更新成功",null);
        }catch (Exception e){
    
    
            e.printStackTrace();
        }
        return Result.init(-200,"更新失败",null);
    }
  • src\main\webapp\WEB-INF\pages\list_depts.jsp
/*修改--回显代码*/
        function updateUI(did) {
    
    
            //alert(did)
            //显示修改页面
            switchDiv(3)
            //获取被修改的数据作回显
            $.get('${path}/deptv2/find?did='+did,function (result) {
    
    
                if(200==result.code){
    
    
                    var dept = result.data;
                    //{"code":200,"msg":null,"data":{"did":9,"dname":"测试部门3"}}
                    $('#u_did1').val(dept.did)
                    $('#u_did2').val(dept.did)
                    $('#u_dname').val(dept.dname)
                }else{
    
    
                    alert(result.msg)//提示没有查询结果
                }
            },'json')
        }
        /*修改*/
        function update() {
    
    
            var data =$('#update_form').serialize();
            $.post('${path}/deptv2/update', data, function (result) {
    
    
                alert(result.msg)
                //切换页面
                switchDiv(2)
                //刷新列表
                refreshTable()
            }, 'json')
        }
    <%--修改结束--%>
  • 前台表单
<div id="editDiv">
    <h1>编辑页面</h1>
    <form id="update_form">
        <input id="u_did1" type="hidden" name="did"  >
        <input id="u_did2" type="text"   disabled="disabled"/><br/>
        <input id="u_dname" type="text" name="dname" /><br/>
        <input id="btn_update" onclick="update()" type="button" value="保存修改"/><br/>
    </form>
</div>

猜你喜欢

转载自blog.csdn.net/qq_41209886/article/details/109208179