SSM整合版本二之Ajax的CRUD

6 篇文章 0 订阅
6 篇文章 0 订阅

SSM整合-Ajax的增删改查

创建Maven工程

分包增添模块

  • controller
    dao
    pojo
    service
    在这里插入图片描述
  • pom.xml文件依赖架构
<properties>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <maven.compiler.source>1.8</maven.compiler.source>
       <maven.compiler.target>1.8</maven.compiler.target>
       <spring.version>5.2.9.RELEASE</spring.version>
       <slf4j.version>1.6.6</slf4j.version>
       <log4j.version>1.2.12</log4j.version>
       <mysql.version>5.1.6</mysql.version>
       <mybatis.version>3.4.5</mybatis.version>
   </properties>
  • Resouce文件正常配置即可
    在这里插入图片描述

技术要点

  • Controller方法返回值类型Object
    (1) Controller方法返回的几种类型
    ModelAndView
    void
    String
    Object
    (2)@ResponseBody注解
    调jackson库将Object转成json字符串返回
    如果没有依赖jackson库则,抛出异常。所以需要配置依赖的Jackson库
<dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.11.3</version>
      </dependency>
  • Controller方法返回Result
  • 返回Result
    private int code;//编码
    private String msg;//提示信息
    private Object data;

将数据能够放进Result对象里面

    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;
    }

Controller方法返回Result

@Controller
@RequestMapping("/resume")
public class ResumeController {
    private static final Logger log = Logger.getLogger(ResumeController.class);
    @Autowired
    private ResumeService resumeService;

    @RequestMapping(path = "/listUI", method = RequestMethod.GET)
    public String listUI() {

        return "list_resume";
    }

Ajax的使用(详细会出一篇博客进行说明)

  • (1)ajax是什么
    AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
    AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
    AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
  • (2)ajax的特点
    AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服 务器交换数据并更新部分网页内容。
    ps:本版本使用ajax不需要重定向或者请求转发
    Jquery实现Ajax
    在这里插入图片描述
  • 导入jQuery库
  • 在页面最上方引入库
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%pageContext.setAttribute("path", request.getContextPath());%>

jQuery代码编写

  • 编写逻辑
    js 发送请求 $.get $.post serialize()
    js 接收结果 function(data){…}
    js 更新页面 $(id值) html()

  • Jquery实现员工列表

  $(function () {
	$.get('${path}/resume/list', function (result) {

                console.info("result =" + result)

                var trs = ''
                trs += '<tr>\n' +
                    '        <td>编号</td>\n' +
                    '        <td>用户名</td>\n' +
                    '        <td>密码</td>\n' +
                    '        <td>毕业院校</td>\n' +
                    '        <td>年龄</td>\n' +
                    '        <td>出生日期</td>\n' +
                    '        <td>操作</td>\n' +
                    '\n' +
                    '    </tr>'
                if (200 == result.code) {
                    var items = result.data;

                    for (var i = 0; i < items.length; i++) {
                        var ruser = items[i]
                        console.info(ruser)
                        trs += ' <tr>\n' +
                            '        <td>' + ruser.id + '</td>\n' +
                            '        <td>' + ruser.username + '</td>\n' +
                            '        <td>' + ruser.password + '</td>\n' +
                            '        <td>' + ruser.edg + '</td>\n' +
                            '        <td>' + ruser.age + '</td>\n' +
                            '        <td>' + ruser.birthday + '</td>\n' +
                            '        <td><a href="javascript:deleteById(' + ruser.id + ')">删除 |</a><a href="javascript:updateUI(' + ruser.id + ')">修改</a></td>\n' +
                            '\n' +
                            '    </tr>'
                    }//end for

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

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


        }
  • 删除指定id的员工
  • Controller层
@RequestMapping(path="/delete",method = RequestMethod.GET)
    public @ResponseBody  Object delete(Integer id){
        log.info("delete id"+id);
        try {
            resumeService.deleteRuserById(id);
            return Result.init(200,"删除成功",null);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Result.init(-200,"删除失败",null);

    }
  • list _resume.jsp
 function deleteById(id) {
            $.get('${path}/resume/delete?id=' + id, function (result) {
                console.info(result)
                if (200 == result.code) {
                    alert(result.msg)
                    refreshTable()//调用列表更新
                } else {
                    alert(result.msg)
                }
            }, 'json')
        }
  • 默认情况下点击超链接 是跳转页面-整体刷新
  • Ajax是局部刷新,点击链接调用函数,函数内部发起请求,处理返回结果,更新页面
  • 属性display:none
  • Ajax不切换页面,所有内容在一个页面,只需要通过style的属性display,将值设置为none不可见,不占高度。
  • 如果需要显示出来,设置display的值为block
 function switchDiv(part) {
            //隐藏内容
            $('#addDiv').css("display", "none")
            $('#listDiv').css("display", "none")
            $('#editDiv').css("display", "none")
            if (1 == part) {//
                $('#addDiv').css("display", "block")
                $('#add_id').val()
                $('#add_username').val('')
                $('#add_password').val('')
                $('#add_edg').val('')
                $('#add_age').val('')
                $('#add_birthday').val('')
            } else if (2 == part) {//列表页面
                $('#listDiv').css("display", "block")
            } else if (3 == part) {//编辑页面
                $('#editDiv').css("display", "block")
            }

        }
  • 添加功能
 @RequestMapping(path="/add",method = RequestMethod.POST)
    public @ResponseBody
    Object add(Ruser ruser){
        log.info("add Ruser"+ruser);
        try {
            resumeService.saveRuser(ruser);
            return Result.init(200,"添加员工成功",null);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Result.init(-200,"添加员工失败",null);
    }
  • 前台代码
<div id="addDiv">
    <h1>添加页面</h1>
    <form id="add_form">
        <input type="hidden" name="did" id="add_id"/><br/>
        <input type="text" name="username" /><br/>
        <input type="text" name="password" id="add_password"/><br/>
        <input type="text" name="edg" id="add_edg"/><br/>
        <input type="text" name="age" id="add_age"/><br/>
<%--        <input type="date" name="birthday" id="add_birthday"/><br/>--%>
        <input id="btn_add" type="button" value="保存"/><br/>
    </form>
</div>
  • 修改代码
    修改带有回显(就是先查到 再赋值再修改)
  • 回显代码
 function updateUI(id) {
            alert(id)
            //显示修改页面
            switchDiv(3)
            //获取被修改的数据作回显
            $.get('${path}/resume/find?id=' + id, function (result) {
                if (200 == result.code) {
                    var ruser = result.data;
                    //{"code":200,"msg":null,"data":{"did":9,"dname":"测试部门3"}}
                    $('#u_id1').val(ruser.id)
                    $('#u_id2').val(ruser.id)
                    $('#u_username').val(ruser.username)
                    $('#u_password').val(ruser.password)
                    $('#u_edg').val(ruser.edg)
                    $('#u_age').val(ruser.age)
                    $('#u_birthday').val(ruser.birthday)
                    $('#u_username1').val(ruser.username)
                    $('#u_password1').val(ruser.password)
                    $('#u_edg1').val(ruser.edg)
                    $('#u_age1').val(ruser.age)
                    $('#u_birthday1').val(ruser.birthday)
                } else {
                    alert(result.msg)//提示没有查询结果
                }
            }, 'json')
        }
  • 调用查询
@RequestMapping(path = "/find", method = RequestMethod.GET)
    public @ResponseBody
    Object find(Integer id) {
        log.info("find id=" + id);//打数据
        if (id != null) {
            Ruser ruser = resumeService.finResumeById(id);
            if (ruser != null) {
                return Result.init(200, null, ruser);//转成json返回页面
            }
        }
        return Result.init(-200, "没有查询结果", null);
    }
  • 正式修改后台代码
 @RequestMapping(path = "/update", method = RequestMethod.POST)
    @ResponseBody
    Object update(Ruser ruser){
        log.info("update ruser="+ruser);
        try {
            resumeService.updateRuserById(ruser);
            return Result.init(200, "更新成功", null);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Result.init(-200, "更新失败", null);
    }
  • 前台代码
 function update() {
            var data = $('#update_form').serialize();// k1=v1&k2=v2
            $.post('${path}/resume/update', data, function (result) {
                alert(result.msg)
                //切换页面
                switchDiv(2)
                //刷新列表
                refreshTable()
            }, 'json')
        }
  • 表单代码
<div id="editDiv">
    <h1>编辑页面</h1>
    <form id="update_form">
        <input id="u_id1" type="hidden" name="id">
        <input id="u_id2" type="text" disabled="disabled"/><br/>
        <input id="u_username" type="text" disabled="disabled"/><br/>
        <input id="u_password" type="text" disabled="disabled"/><br/>
        <input id="u_edg" type="text" disabled="disabled"/><br/>
        <input id="u_age" type="text" disabled="disabled"/><br/>
        <input id="u_birthday" type="text" disabled="disabled"/><br/>

        <input id="u_username1" type="text" name="username"/><br/>
        <input id="u_password1" type="text" name="password"/><br/>
        <input id="u_edg1" type="text" name="edg"/><br/>
        <input id="u_age1" type="text" name="age"/><br/>
        <input id="btn_update" onclick="update()" type="button" value="保存修改"/><br/>
    </form>
</div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值