ssm分布式+分页助手+angular实现分页
-
后端java代码
- 表/pojo/dao/service/controller
- 首先采用分布式dubbo框架以上的 service层和controller层 是分布在不同服务器上的
- controller层代码(其他层不再累赘)
@RequestMapping("/add") public Result add(@RequestBody Brand brand) { try { int affectRows = brandService.add( brand ); if (affectRows > 0) { return new Result( true, "添加成功" ); }else { return new Result( false, "添加失败" ); } } catch (Exception e) { e.printStackTrace(); return new Result( false, "服务器异常,添加失败" ); } }
- Resultl类是一个专门返回信息用的类,实现序列化
public class Result implements Serializable { private boolean success; private String message; public Result(boolean success, String message) { this.success = success; this.message = message; }
- 其中controller层参数中加@RequestBody注解,加上这个注解后会根据请求体中的数据自动创建brand对象,把数据自动封装到对象里,如果不加注解只能用同字段名参数接受
-
前端代码
- 引入angular框架,angular框架介绍
-
AngularJS 是一个 JavaScript 框架
AngularJS 是一个 JavaScript 框架。它是一个以 JavaScript 编写的库。
AngularJS 是以一个 JavaScript 文件形式发布的,可通过 script 标签添加到网页中:
-
AngularJS 通过 ng-directives 扩展了 HTML。
ng-app 指令定义一个 AngularJS 应用程序。
ng-model 指令把元素值(比如输入域的值)绑定到应用程序。
ng-bind 指令把应用程序数据绑定到 HTML 视图。
-
当网页加载完毕,AngularJS 自动开启。
ng-app 指令告诉 AngularJS,<div> 元素是 AngularJS 应用程序 的"所有者"。
ng-model 指令把输入域的值绑定到应用程序变量 name。
ng-bind 指令把应用程序变量 name 绑定到某个段落的 innerHTML。
ng-init 指令初始化 AngularJS 应用程序变量。 -
AngularJS 应用
AngularJS 模块(Module) 定义了 AngularJS 应用。
AngularJS 控制器(Controller) 用于控制 AngularJS 应用。
ng-app指令指明了应用, ng-controller 指明了控制器。
-
AngularJS 模块定义应用:
AngularJS 模块
var app = angular.module('myApp', []);
-
AngularJS 控制器控制应用:
AngularJS 控制器
app.controller('myCtrl', function($scope) { $scope.firstName= "John"; $scope.lastName= "Doe"; });
-
- 导入pagination.js/pagination.css前端用的分页插件
- 再html页面引入分页插件
<tm-pagination conf="paginationConf"></tm-pagination>
- <body>标签上引入angular的module和controller
ng-app="pinyougou" ng-controller="brandController"
- 再body的module上引入前端分页插件的模块
var app = angular.module('pinyougou', ['pagination']);//定义模块
- 再app应用模块的控制器上给分页插件的参数赋值
//设置分页插件的参数 $scope.paginationConf = { currentPage: 1, totalItems: 10, itemsPerPage: 10, perPageOptions: [10, 20, 30, 40, 50], onChange: function () { $scope.reloadList(); } };
- 当参数发生改变时调用reloadList()函数,重新加载数据:当页面加载完毕后插件会先自动加载一次reloadList()函数,来显示页面数据
$scope.reloadList = function () { $scope.findPage($scope.paginationConf.currentPage, $scope.paginationConf.itemsPerPage); };
- 加载reloadList()函数时,调用findPage()函数,这时访问后台数据,取到数据后将表格需要的数据放在$scope.list中
$scope.findPage = function (page, rows) { $http.get('../brand/findPage.do?page=' + page + '&rows=' + rows).success(function (response) { $scope.list = response.rows; $scope.paginationConf.totalItems = response.total; }) };
- 拿到新数据后,框架帮我们重新再页面遍历一遍数据
- html代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>品牌管理</title> <meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name="viewport"> <link rel="stylesheet" href="../plugins/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="../plugins/adminLTE/css/AdminLTE.css"> <link rel="stylesheet" href="../plugins/adminLTE/css/skins/_all-skins.min.css"> <link rel="stylesheet" href="../css/style.css"> <script src="../plugins/jQuery/jquery-2.2.3.min.js"></script> <script src="../plugins/bootstrap/js/bootstrap.min.js"></script> <!-- 引入angular的js --> <script type="text/javascript" src="../plugins/angularjs/angular.min.js"></script> <!-- 引入分页相关的JS和CSS --> <script type="text/javascript" src="../plugins/angularjs/pagination.js"></script> <link rel="stylesheet" href="../plugins/angularjs/pagination.css"> <!-- <script type="text/javascript" src="../js/base_pagination.js"></script> <script type="text/javascript" src="../js/controller/baseController.js"></script> <script type="text/javascript" src="../js/controller/brandController.js"></script> <script type="text/javascript" src="../js/service/brandService.js"></script>--> <script> var app = angular.module('pinyougou', ['pagination']);//定义模块 app.controller('brandController', function ($scope, $http) { //设置分页插件的参数 $scope.paginationConf = { currentPage: 1, totalItems: 10, itemsPerPage: 10, perPageOptions: [10, 20, 30, 40, 50], onChange: function () { $scope.reloadList(); } }; $scope.reloadList = function () { $scope.findPage($scope.paginationConf.currentPage, $scope.paginationConf.itemsPerPage); }; $scope.findPage = function (page, rows) { $http.get('../brand/findPage.do?page=' + page + '&rows=' + rows).success(function (response) { $scope.list = response.rows; $scope.paginationConf.totalItems = response.total; }) }; $scope.add=function () { $http.post('../brand/add.do', $scope.entity).success(function (response) { if (response.success) { $scope.reloadList();//添加成功后更新list集合的值 alert(response.message); }else{ alert(response.message);//添加失败后展示message里的内容 } }) }; $scope.add=function () { $http.post('../brand/add.do',$scope.entity).success(function (response) { if (response.success) { $scope.reloadList(); alert(response.message); }else{ alert(response.message); } }) } }); </script> </head> <body class="hold-transition skin-red sidebar-mini" ng-app="pinyougou" ng-controller="brandController"> <!-- .box-body --> <div class="box-header with-border"> <h3 class="box-title">品牌管理</h3> </div> <div class="box-body"> <!-- 数据表格 --> <div class="table-box"> <!--工具栏--> <div class="pull-left"> <div class="form-group form-inline"> <div class="btn-group"> <button type="button" class="btn btn-default" title="新建" data-toggle="modal" data-target="#editModal" ng-click="entity={}"><i class="fa fa-file-o"></i> 新建 </button> <button type="button" class="btn btn-default" title="删除" ng-click="dele()"><i class="fa fa-trash-o"></i> 删除 </button> <button type="button" class="btn btn-default" title="刷新" onclick="window.location.reload();"><i class="fa fa-refresh"></i> 刷新 </button> </div> </div> </div> <div class="box-tools pull-right"> <div class="has-feedback"> 品牌名称:<input type="text" ng-model="searchEntity.name"> 品牌首字母:<input type="text" ng-model="searchEntity.firstChar"> <input class="btn btn-default" ng-click="reloadList()" type="button" value="查询"> </div> </div> <!--工具栏/--> <!--数据列表--> <table id="dataList" class="table table-bordered table-striped table-hover dataTable"> <thead> <tr> <th class="" style="padding-right:0px"> <input id="selall" type="checkbox" class="icheckbox_square-blue"> </th> <th class="sorting_asc">品牌ID</th> <th class="sorting">品牌名称</th> <th class="sorting">品牌首字母</th> <th class="text-center">操作</th> </tr> </thead> <tbody> <tr ng-repeat="entity in list"> <td><input type="checkbox" ng-click="updateSelection($event,entity.id)"></td> <td>{{entity.id}}</td> <td>{{entity.name}}</td> <td>{{entity.firstChar}}</td> <td class="text-center"> <button type="button" class="btn bg-olive btn-xs" ng-click="findById(entity.id)" data-toggle="modal" data-target="#editModal">修改 </button> </td> </tr> </tbody> </table> <!--数据列表/--> </div> <!-- 数据表格 /--> <!-- 分页 --> <tm-pagination conf="paginationConf"></tm-pagination> </div> {{selectIds}} <!-- /.box-body --> <!-- 编辑窗口 --> <div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <h3 id="myModalLabel">品牌编辑</h3> </div> <div class="modal-body"> <table class="table table-bordered table-striped" width="800px"> <tr> <td>品牌名称</td> <td><input ng-model="entity.name" class="form-control" placeholder="品牌名称"></td> </tr> <tr> <td>首字母</td> <td><input ng-model="entity.firstChar" class="form-control" placeholder="首字母"></td> </tr> </table> </div> <div class="modal-footer"> <button class="btn btn-success" data-dismiss="modal" aria-hidden="true" ng-click="add()">保存</button> <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">关闭</button> </div> </div> </div> </div> </body> </html>
- 引入angular框架,angular框架介绍