SSM的CRUD练习
ajax与请求转发或者重定向的区别SSM的CRUD,使用ajax实现小技巧ajax模板
实例项目演示环境搭建pom.xmlResult类DepartmentDepartmentControllermain.jsp前端html和jquery代码
具体步骤通过ajax实现显示所有部门信息DepartmentControllerjshtml页面内容
增加操作DepartmentControllerhtml页面JS
删除操作DepartmentControllerJSJS
修改操作DepartmentControllerhtml页面JS
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()
$
.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
);
}catch (Exception e
){
e
.printStackTrace();
}
return Result
.init(-200,"保存失败",null
);
}
$
.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
;
private String message
;
private Object data
;
public static Msg
init(int code
, String msg
, Object data
){
Msg result
=new Msg(code
,msg
,data
);
return result
;
}
}
Department
public class Department {
private Integer did
;
private String dname
;
}
DepartmentController
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
;
@RequestMapping(path
= "/main",method
= RequestMethod
.GET
)
public String
listUI(){
return "main";
}
@RequestMapping(path
= "/list",method
= RequestMethod
.GET
)
public @ResponseBody
Object
list(){
List
<Department> list
=iDepartmentDao
.findAllDepartment();
System
.out
.println(list
);
return Result
.init(200,"",list
);
}
@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
);
}catch (Exception e
){
}
return Result
.init(-200,"删除失败",null
);
}
@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
);
}catch (Exception e
){
}
return Result
.init(-200,"保存失败",null
);
}
@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
);
}
}
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
);
}catch (Exception e
){
}
return Result
.init(-200,"保存失败",null
);
}
}
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
);
}
js
function
refreshTable(){
$
.get('${path}/department/list', function
(result
) {
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
;
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>'
}
$
('#table').html(trs
)
}
}, 'json')
}
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
);
}catch
(Exception e
){
}
return Result
.init(-200,"保存失败",null
);
}
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()
$
.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
);
}catch
(Exception e
){
}
return Result
.init(-200,"删除失败",null
);
}
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
);
}
}
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
);
}catch
(Exception e
){
}
return Result
.init(-200,"保存失败",null
);
}
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
;
$
('#u_did1').val(dept
.did
)
$
('#u_did2').val(dept
.did
)
$
('#u_dname').val(dept
.dname
)
}else{
alert(result
.msg
)
}
},'json')
}
function
update() {
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('服务问题,请求失败')
}
})
}