【SSM - SpringMVC篇 练习】 SSM的CRUD,使用ajax实现(增删查 回显 改) ajax与请求转发或者重定向的区别,及ajax的使用

ajax与请求转发或者重定向的区别

请求转发和重定向每次把数据交给浏览器都需要打开新的页面,为整体刷新
而ajax却可以在一个页面进行发出请求,接收结果,也就是部分更新(局部刷新)
在后面ajax比请求转发或者重定向更加常用

SSM的CRUD,使用ajax实现

小技巧

1.我们在Controller中对于@RequestMapping注解参数path的值,可以用是否带UI后缀来区分.
带UI后缀地址的表示显示(打开)一个页面,不访问数据,只是做单纯的页面跳转
不带UI的是访问数据库,通过sql查询,然后通过jackson实现返回json格式的参数

2.使用ajax进行增删查改的时候,所有的内容都在一个页面上完成,通过jQuery函数css设置style的属性display,可将其值设置为none不可见(不占页面空间的),block可见。

3.ajax处理事件的流程一般为
请求->处理 或者 事件->请求->处理
$.get(‘地址’,处理函数,数据类型)
地址:项目名/模块名/功能名
处理函数:function(xxx){}
数据类型:json

例如 增加数据


 $(function () {
    
    
                   switchUI(2)
                 refreshTable()
               //点击增加数据**事件**
                 $('#btn_add').click(function () {
    
    
                     var data = $('#add_form').serialize() //方法会将表单数据自动拼接成k1=v1&k2=v2 did=1&dname=测试组
                       //发送请求
                     $.post('${path}/department/add',data,function (result) {
    
    
                     //处理函数
                         console.info(result)
                         //页面切换
                         switchUI(2)
                         refreshTable()
                         alert(result.msg)
                     },'json')
                 })
             })

ajax模板

//后台

@RequestBody

consumes="application/json

 @RequestMapping(path ="/update",method = RequestMethod.POST,consumes="application/json")
    public @ResponseBody
    Object update(@RequestBody Department department){
    
    
        System.out.println(department);
        try{
    
    
          iDepartmentDao.updateDepartmentById(department);
            return Result.init(200,"保存成功",null); //返回对象需要被转成json字符串
        }catch (Exception e){
    
    
            e.printStackTrace();
        }
        return Result.init(-200,"保存失败",null); //返回对象需要被转成json字符串
    }

//前台

$.ajax({
    
    

url:'${path}/模块名/功能名',

async:true,

data:'{"did":"","dname":"'+dname+'"}',

type:"post",

contentType:"application/json;charset=utf-8",

success:function(result){
    
    

        if(200==result.code){
    
    

      alert(result.msg)

}

},

error:function(result){
    
    

         alert('服务问题,请求失败')

}

})
var did= $('#u_did2').val()
            var dname= $('#u_dname').val()
            $.ajax({
    
    
                url:'${path}/department/update',
                async:true,
                data:'{"did":"'+did+'","dname":"'+dname+'"}',
                type:"post",
            contentType:"application/json;charset=utf-8",

                success:function(result){
    
    

                if(200==result.code){
    
    
                    alert(result.msg)
                    //切换页面
                    switchUI(1)
                    //刷新列表
                    refreshTable()
                }
            },
            error:function(result){
    
    
                alert('服务问题,请求失败')
            }

        })

实例

项目演示

jssm框架,ajax请求的增删查改

环境搭建pom.xml

pom.xml jakcson实现javabean对象与json数据之间转换。

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

Result类

//ajax返回提示信息类

public class Result {
    
    
    private int code;   //返回编码(200正常、404未找到之类的)
    private String message; //返回提示信息
    private Object data;    //返回携带的数据

    //static静态方法,以后直接通过Msg.init()方法使用就行,简化
    public static Msg init(int code, String msg, Object data){
    
    
        Msg result =new Msg(code,msg,data);
        return result;
    }
    
    //省略get/set方法
}

Department

//部门
public class Department {
    
    
    private Integer did;
    private String dname;
    //省略get/set方法
}

DepartmentController

//使用ajax来CRUD
//地址带UI的表示显示(打开)一个页面,不带UI的是查询返回json格式数据
/*
一般修改操作都有回显界面(增加、删除、更新),查询不需要回显页面,
    回显就是先查询显示,再修改(两个sql)
*/
package com.zx.controller;

import com.zx.dao.IDepartmentDao;
import com.zx.domain.Department;
import com.zx.domain.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping("/department")//写在类上面指定当前模块路径
public class DepartmentController {
    
    

    @Autowired
    IDepartmentDao iDepartmentDao;

    //地址上带UI表示打开页面,不带的表示返回数据
    @RequestMapping(path = "/main",method = RequestMethod.GET)
    public String listUI(){
    
    

        return  "main";
    }
     //不带UI的表示返回数据
    @RequestMapping(path = "/list",method = RequestMethod.GET)
    public @ResponseBody
    Object list(){
    
    
        List<Department> list=iDepartmentDao.findAllDepartment();
        System.out.println(list);
        return Result.init(200,"",list); //返回对象需要被转成json字符串
    }

    @RequestMapping(path = "/delete",method = RequestMethod.GET)
    public @ResponseBody
    Object delete(Integer did){
    
    
         System.out.println(did);
         try{
    
    
             iDepartmentDao.deleteDepartmentById(did);
             return Result.init(200,"删除成功",null); //返回对象需要被转成json字符串
         }catch (Exception e){
    
    

         }
        return Result.init(-200,"删除失败",null); //返回对象需要被转成json字符串
    }

    @RequestMapping(path ="/add",method = RequestMethod.POST)
    public @ResponseBody
    Object add(Department department){
    
    
        System.out.println(department);
        try{
    
    
            iDepartmentDao.saveDepartment(department);
            return Result.init(200,"保存成功",null); //返回对象需要被转成json字符串
        }catch (Exception e){
    
    

        }
        return Result.init(-200,"保存失败",null); //返回对象需要被转成json字符串
    }
    @RequestMapping(path = "/find",method = RequestMethod.GET)
    public @ResponseBody
    Object find(Integer did){
    
    
        System.out.println(did);
        if(did!=null){
    
    
            Department department= iDepartmentDao.findDepartmentByID(did);
            if(department!=null){
    
    
                return Result.init(200,null,department); //返回对象需要被转成json字符串
            }
        }
        return Result.init(200,null,null);
    }

    @RequestMapping(path ="/update",method = RequestMethod.POST)
    public @ResponseBody
    Object update(Department department){
    
    
        System.out.println(department);
        try{
    
    
            iDepartmentDao.updateDepartmentById(department);
            return Result.init(200,"保存成功",null); //返回对象需要被转成json字符串
        }catch (Exception e){
    
    

        }
        return Result.init(-200,"保存失败",null); //返回对象需要被转成json字符串
    }
}

main.jsp前端html和jquery代码


<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<%
    pageContext.setAttribute("path",request.getContextPath());
%>
<head>
    <title>Title</title>
    <!-- 引入jquery库-->
    <script type="text/javascript" src="${
    
    path}/js/jquery-1.11.0.min.js"></script>
    <!-- 开始ajax编程  -->
 <%--<script type="text/javascript">
     alert(111);
     /* 页面切换*/
     function  switchUI(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")
         }
     }
     /*  查询所有*/
     function refreshTable(){
    
    
         alert(111)
         //1:js发送请求
         $.get('${
    
    path}/department/list', function (result) {
    
    
             //2:js接收结果 接收数据
             console.info("result=" + result)
             //{
    
    "code":200,"msg":"","data":[{
    
    "did":1,"dname":"java"},{
    
    "did":11,"dname":"python"},{
    
    "did":12,"dname":"php"},{
    
    "did":13,"dname":"web"},{
    
    "did":14,"dname":"c"}]}

             //定义表格的内容
             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 数据类型
     }
     $(function () {
    
    
         alert(111)
         switchUI(2)
         refreshTable()
     })
     /*增加数据*/
     $('#btn_add').click(function () {
    
    
         var data = $('#add_form').serialize() //方法会将表单数据自动拼接成k1=v1&k2=v2 did=1&dname=测试组
         $.post('${
    
    path}/department/add',data,function (result) {
    
    
             console.info(result)
             //页面切换
             switchUI(2)
             refreshTable()
             alert(result.msg)
         },'json')
     })

     /* 删除数据*/
     function deleteById(did) {
    
    
         $.get('${
    
    path}/department/delete?did='+did+'',function (ruselt) {
    
    
             console.info(ruselt)
             if(200==ruselt.code){
    
    
                 alert(ruselt.msg)
             } else {
    
    
                 alert(ruselt.msg)
             }
             refreshTable()
         },'json')
     }
     /!* 修改数据*!/
     //  回显
     function updateUI(did) {
    
    
         //显示修改页面
         switchUI(3)
         //获得回显数据
         $.get('${
    
    path}/department/find='+did+'',function (result) {
    
    
             console.info(result)
             if(200==result.code){
    
    
                 var  department=result.data()
                 ${
    
    '#u_did_1'}.val(department.did)
                 ${
    
    '#u_did_2'}.val(department.did)
                 ${
    
    '#dname'}.val(department.dname)

             }else {
    
    
                 alert(result.msg)
             }
         },'json')

     }
     function update() {
    
    
         var data=$('update_form').serialize()
         $.post('${
    
    path}/department/update',data,function (result) {
    
    
             alert(result.msg)
             //切换页面
             switchUI(2)
             refreshTable()
         },'json')
     }
 </script>--%>

    <script type="text/javascript">
        /* 页面切换*/
        function  switchUI(part) {
    
    
            /* 默认全部隐藏*/
            $('#listDiv').css("display","none")
            $('#addDiv').css("display","none")
            $('#editDiv').css("display","none")
            if(1 == part){
    
    //列表页面
                $('#listDiv').css("display","block")
            }else if(2 == part){
    
    //添加页面
                $('#addDiv').css("display","block")
                $('#add_dname').val('')
            }
            else if(3 == part){
    
    //编辑页面
                $('#editDiv').css("display","block")
            }
        }
        //把数据发送到页面
        function refreshTable(){
    
    
            //1:js发送请求
            $.get('${
    
    path}/department/list', function (result) {
    
    
                //2:js接收结果 接收数据
                console.info("result=" + result)
                //{
    
    "code":200,"msg":"","data":[{
    
    "did":1,"dname":"java"},{
    
    "did":11,"dname":"python"},{
    
    "did":12,"dname":"php"},{
    
    "did":13,"dname":"web"},{
    
    "did":14,"dname":"c"}]}

                //定义表格的内容
                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 数据类型
        }
        //显示列表数据
        $(function () {
    
    
            switchUI(1)
            refreshTable()
        })
        /*增加数据*/
        function add() {
    
    
            var data01 = $('#add_form').serialize() //方法会将表单数据自动拼接成k1=v1&k2=v2 did=1&dname=测试组
            $.post('${
    
    path}/department/add',data01,function (result) {
    
    
                console.info(result)
                //页面切换
                switchUI(1)
                refreshTable()
                alert(result.msg)
            },'json')
        }
        /* 删除数据*/
        function deleteById(did) {
    
    
            $.get('${
    
    path}/department/delete?did='+did+'',function (ruselt) {
    
    
                console.info(ruselt)
                if(200==ruselt.code){
    
    
                    alert(ruselt.msg)
                } else {
    
    
                    alert(ruselt.msg)
                }
                refreshTable()
            },'json')
        }
        /!* 修改数据*!/
        //  回显
        function updateUI(did) {
    
    
            //显示修改页面
            switchUI(3)
            //获取被修改的数据作回显
            $.get('${
    
    path}/department/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 data02 = $('#update_form').serialize()// k1=v1&k2=v2
            $.post('${
    
    path}/department/update',data02,function (result) {
    
    
                alert(result.msg)
                //切换页面
                switchUI(1)
                //刷新列表
                refreshTable()
            },'json')
        }
    </script>
</head>
<body>
<div  id="listDiv" >
    <a href="javascript:switchUI(2)">新增</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"/><br/>
        <input id="btn_add" οnclick="add()" type="button" value="保存"/><br/>
    </form>
</div>

<div id="editDiv" >
    <h1>修改页面</h1>
    <form  id="update_form">
        <input id="u_did1" type="hidden"  name="did1"  >
        <input  id="u_did2" type="text" name="did2"  disabled="disabled"/><br/>
        <input  id="u_dname"  type="text" name="dname"  /><br/>
        <input id="btn_update" οnclick="update()" type="button" value="保存修改"/><br/>
    </form>
</div>
</div>
</body>
</html>


具体步骤

通过ajax实现显示所有部门信息

@ResponseBody注解将返回的结果转换为json数据格式

DepartmentController

  @RequestMapping(path = "/list",method = RequestMethod.GET)
    public @ResponseBody
    Object list(){
    
    
        List<Department> list=iDepartmentDao.findAllDepartment();
        System.out.println(list);
        return Result.init(200,"",list); //返回对象需要被转成json字符串
    }

js

  function refreshTable(){
    
    
          //1:js发送请求
          $.get('${path}/department/list', function (result) {
    
    
              //2:js接收结果 接收数据
              console.info("result=" + result)
              //{"code":200,"msg":"","data":[{"did":1,"dname":"java"},{"did":11,"dname":"python"},{"did":12,"dname":"php"},{"did":13,"dname":"web"},{"did":14,"dname":"c"}]}

              //定义表格的内容
              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 数据类型
      }

html页面内容

<div  id="listDiv" >
    <a href="javascript:switchUI(1)">新增</a>
    <table border="1px" width="100%" id="table"></table>
</div>

增加操作

DepartmentController

 @RequestMapping(path ="/add",method = RequestMethod.POST)
    public @ResponseBody
    Object add(Department department){
    
    
        System.out.println(department);
        try{
    
    
            iDepartmentDao.saveDepartment(department);
            return Result.init(200,"保存成功",null); //返回对象需要被转成json字符串
        }catch (Exception e){
    
    

        }
        return Result.init(-200,"保存失败",null); //返回对象需要被转成json字符串
    }

html页面

<div id="addDiv"   >
    <h1>添加页面</h1>
    <form id="add_form"  >
        <input type="hidden" name="did"/><br/>
        <input type="text" name="dname" id="add_dname"/><br/>
        <input id="btn_add" type="button" value="保存"/><br/>
    </form>
</div>

JS

    $(function () {
    
    
                   switchUI(2)
                 refreshTable()

                 $('#btn_add').click(function () {
    
    
                     var data = $('#add_form').serialize() //方法会将表单数据自动拼接成k1=v1&k2=v2 did=1&dname=测试组
                     $.post('${path}/department/add',data,function (result) {
    
    
                         console.info(result)
                         //页面切换
                         switchUI(2)
                         refreshTable()
                         alert(result.msg)
                     },'json')
                 })
             })

删除操作

DepartmentController

 @RequestMapping(path = "/delete",method = RequestMethod.GET)
    public @ResponseBody
    Object delete(Integer did){
    
    
         System.out.println(did);
         try{
    
    
             iDepartmentDao.deleteDepartmentById(did);
             return Result.init(200,"删除成功",null); //返回对象需要被转成json字符串
         }catch (Exception e){
    
    

         }
        return Result.init(-200,"删除失败",null); //返回对象需要被转成json字符串
    }

JS

  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>'

JS

    /* 删除数据*/
      function deleteById(did) {
    
    
         $.get('${path}/department/delete?did='+did+'',function (ruselt) {
    
    
                          console.info(ruselt)
             if(200==ruselt.code){
    
    
                 alert(ruselt.msg)
             } else {
    
    
                 alert(ruselt.msg)
             }
             refreshTable()
         },'json')
      }

修改操作

DepartmentController

通过did来查询,并回显数据

   @RequestMapping(path = "/find",method = RequestMethod.GET)
    public @ResponseBody
    Object find(Integer did){
    
    
        System.out.println(did);
        if(did!=null){
    
    
            Department department= iDepartmentDao.findDepartmentByID(did);
            if(department!=null){
    
    
                return Result.init(200,null,department); //返回对象需要被转成json字符串
            }
        }
        return Result.init(200,null,null);
    }

更新操作

 @RequestMapping(path ="/update",method = RequestMethod.POST)
    public @ResponseBody
    Object update(Department department){
    
    
        System.out.println(department);
        try{
    
    
            iDepartmentDao.updateDepartmentById(department);
            return Result.init(200,"保存成功",null); //返回对象需要被转成json字符串
        }catch (Exception e){
    
    

        }
        return Result.init(-200,"保存失败",null); //返回对象需要被转成json字符串
    }

html页面

<div id="editDiv">
    <h1>修改页面</h1>
    <form  id="update_form">
        <input id="u_did_1" type="hidden"   >
        <input  id="u_did_2" type="text"   disabled="disabled"/><br/>
        <input  id="dname"  type="text" /><br/>
        <input id="btn_update" onclick="update()" type="button" value="保存修改"/><br/>
    </form>

JS

回显操作,更新操作

   
 /!* 修改数据*!/
        //  回显
        function updateUI(did) {
    
    
            //显示修改页面
            switchUI(3)
            //获取被修改的数据作回显
            $.get('${path}/department/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 data02 = $('#update_form').serialize()// k1=v1&k2=v2
            $.post('${path}/department/update',data02,function (result) {
                alert(result.msg)
                //切换页面
                switchUI(1)
                //刷新列表
                refreshTable()
            },'json')*/
            var did= $('#u_did2').val()
            var dname= $('#u_dname').val()
            $.ajax({
    
    
                url:'${path}/department/update',
                async:true,
                data:'{"did":"'+did+'","dname":"'+dname+'"}',
                type:"post",
            contentType:"application/json;charset=utf-8",

                success:function(result){
    
    

                if(200==result.code){
    
    
                    alert(result.msg)
                    //切换页面
                    switchUI(1)
                    //刷新列表
                    refreshTable()
                }
            },
            error:function(result){
    
    
                alert('服务问题,请求失败')
            }

        })
        }

猜你喜欢

转载自blog.csdn.net/mighty_Jon/article/details/109187939