文章目录
一、项目准备(1)界面展示(2)复制工程(3)Controller方法返回值类型Object(4)Controller方法返回Result
二、ajax(1) ajax介绍(2)Jquery实现Ajax
三、增删改查(1)实现部门列表界面(2)内容在同一页面(3)刷新界面(4)删除(5)添加(6)修改
一、项目准备
(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 {
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
private IDepartmentService departmentService
;
@RequestMapping(path
= "/listUI",method
= RequestMethod
.GET
)
public String
listUI(){
return "list_depts";
}
@RequestMapping(path
= "/list",method
= RequestMethod
.GET
)
public @ResponseBody Object
list(){
List
<Department> list
=departmentService
.findAllDepartments();
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
() {
$
.get('${path}/deptv2/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')
})
(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('')
$
.get('${path}/deptv2/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')
}
<%--刷新界面结束
--%>
(4)删除
(src\main\java\com\smp\controller\DepartmentV2Controller.java)
@RequestMapping(path
= "/delete",method
= RequestMethod
.GET
)
public @ResponseBody Object
delete(Integer 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)
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)
@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 () {
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
){
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
) {
switchDiv(3)
$
.get('${path}/deptv2/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 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
>