后端使用: SpringMVC + Mybatis + pageHelper分页插件;
前端使用:freemarker模版 、Jquery + ajax ;
效果展示:
-
核心要点
想要实现前端页面 局部刷新效果,首先在html中定义一个 div盒子,然后通过 ajax获取后端数据并使用jquery的empty()方法及append()方法将div中的数据清空并将新的数据插入到 div中,就可以实现局部刷新效果;如下所示:
<html>
...
<body>
<!-- 刷新的内容 -->
<div class="container-fluid">
<p>这是内容刷新区域</p>
</div>
<!-- js 代码 -->
<script type="text/javascript">
function getData(){
$.ajax({
url:'',
type:'' ,
...
success:function(data){
$(".container-fluid").empty(); // 先清空 div中的内容
$(".container-fluid").append(data); // 然后在 div中插入 ajax获取的内容
}
});
}
</script>
</body>
<html>
为了实现 gif效果图那样的效果,这里将整个 html页面作为ajax获取的data数据;所以需要创建两个页面,一个 index.ftl 首页及一个 index-table.ftl 表格内容页面。(gif效果图中前端使用了bootstrap,后面代码中将css的class等属性都删减,这里只保留的主要代码)。
一、 前端
1. 首页 index.ftl
<html>
...
<body>
<!-- 刷新的内容 -->
<div class="container-fluid">
<p>这是内容刷新区域</p>
</div>
<!-- 分页导航条 -->
<!--<div>
<a >上一页,下一页</a>
</div> -->
<!-- js 代码 -->
<script type="text/javascript">
var pageSize = 10 ;
$(function(){
toPage(1); //加载完index页面后,获取第一页表格数据
});
//跳转第几页
function toPage( num ){
$.ajax({
url:'${request.contextPath}/admins/user/list',
type:'POST',
data:{
'pageNum':num, //第几页
'pageSize':pageSize // 每页数据数
},
success:function(data){
$(".container-fluid").empty();
$(".container-fluid").append(data);
}
});
</script>
</body>
<html>
2. 表格数据页面 index-table.ftl
作为 局部刷新的内容,可以不需要完整的html格式。
分页控制也可以放在这个里面,使用相同jquery、ajax方法就可以达到效果
<div id="index_table">
<table >
<thead>
<tr >
<th >序号</th>
<th >姓名</th>
<th >密码</th>
<th >性别</th>
<th >生日</th>
<th >电话</th>
<th >邮箱</th>
<th >地址</th>
<th >注册时间</th>
<th >操作</th>
</tr>
</thead>
<#list userPageInfo.list as user>
<tr>
<td >${user.id}</td>
<td >${user.username}</td>
<td > ${user.password}</td>
<td >${user.sex} </td>
<td >${user.birthday}</td>
<td >${user.mobile}</td>
<td >${user.email}</td>
<td >${user.address}</td>
<td >${user.registerTime?string('yyyy-MM-dd HH:mm:ss')}</td>
<td >
<div >
<a onclick="btn_Update(${user_index})">修改</a>
<a >删除</a>
</div>
</td>
</tr>
</#list>
</table>
<!-- 分页导航条 -->
<div>
<a onclick="toPage(${userPageInfo.pageNum +1})">下一页</a>
</div>
</div>
<!-- js 代码 -->
<script type="text/javascript">
var pageSize = 10 ;
//跳转第几页
function toPage( num ){
$.ajax({
url:'${request.contextPath}/admins/user/list',
type:'POST',
data:{
'pageNum':num, //第几页
'pageSize':pageSize // 每页数据数
},
success:function(data){
$("#index_table").empty();
$("#index_table").append(data);
}
});
</script>
二、 后台(SpringMVC)
@Controller
@RequestMapping("/admins")
public class AdminController {
@Resource(name = "userServiceImpl")
private UserService userService;
private Logger logger = LoggerFactory.getLogger(getClass());
@RequestMapping(value = "/user/list", method = RequestMethod.POST )
public String getUserAll(ModelMap modelMap, int pageNum, int pageSize) throws Exception {
PageHelper.startPage(pageNum, pageSize);
List<User> userList = userService.findAll("UserMapper.selectAll", null);
PageInfo<User> pageInfo = new PageInfo<>(userList);
//logger.info("==pageInfo==:{}" + pageInfo);
modelMap.addAttribute("userPageInfo", pageInfo);
return "/admin/user/index-table";
}
}