如何通过jsp页面异步实现ajax?

如何通过jsp页面异步实现ajax?

1. 服务端先返回页面基本结构(如message.jsp),

<%@ page language="java" contentType="text/html; charset=utf-8"
 pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%
 String path = request.getContextPath();
 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
   + path + "/";
%>
<!DOCTYPE html>
<!--[if lt IE 7]> <html class="ie ie6 lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="ie ie7 lt-ie9 lt-ie8"  lang="en"> <![endif]-->
<!--[if IE 8]> <html class="ie ie8 lt-ie9"    lang="en"> <![endif]-->
<!--[if IE 9]> <html class="ie ie9"      lang="en"> <![endif]-->
<!--[if !IE]><!-->
<html lang="en" class="no-ie">
<!--<![endif]-->

<head>
<!-- Meta-->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="author" content="">
<title>消息中心</title>
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]><script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script><script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script><![endif]-->
<!-- Bootstrap CSS-->
<link rel="stylesheet" href="<%=path %>/app/css/bootstrap.css">
<!-- Vendor CSS-->
<link rel="stylesheet" href="<%=path %>/vendor/fontawesome/css/font-awesome.min.css">
<link rel="stylesheet" href="<%=path %>/vendor/animo/animate+animo.css">

<!-- START Page Custom CSS-->
<!-- Data Table styles-->
<link rel="stylesheet" href="<%=path %>/vendor/datatable/extensions/datatable-bootstrap/css/dataTables.bootstrap.css">
<link rel="stylesheet" href="<%=path %>/vendor/datatable/extensions/ColVis/css/dataTables.colVis.css">
<!-- END Page Custom CSS-->
<!-- App CSS-->
<link rel="stylesheet" href="<%=path %>/app/css/app.css">
<link rel="stylesheet" href="<%=path %>/app/css/beadmin-theme-c2.css">
<link rel="stylesheet" href="<%=path %>/vendor/sweetalert/lib/sweet-alert.css" />
<link rel="stylesheet" href="<%=path %>/css/page.css"/>

<!-- Modernizr JS Script-->
<script src="<%=path %>/vendor/modernizr/modernizr.js" type="application/javascript"></script>
<!-- FastClick for mobiles-->
<script src="<%=path %>/vendor/fastclick/fastclick.js" type="application/javascript"></script>.
 <script>
 var basePath = '<%=basePath %>';
 var pageNo = ${page.pageNo};
 var totalCount = ${page.totalCount};
 var totalPage = ${page>totalPage};
 var pageSize = ${page.pageSize};
</script>
</head>

<body>
<!-- START Main wrapper-->
<div class="wrapper" > 

 
 <!-- START Main section-->
 <section> 
 <!-- START Page content-->
 <div class="content-wrapper" style="margin-left:-250px;margin-top:-40px;">
  <h3>消息中心
  <!-- <div style="float:right; margin-top:5px;" class="form-group">
     <button type="button" onclick="$('#myModal').modal({backdrop: 'static', keyboard: false});;" class="btn btn-labeled btn-success"> <span class="btn-label"><i class="fa fa-plus"></i> </span>添加</button>
     
    </div>-->
    <small>消息管理</small>
  </h3>
  
  <!-- START panel--> 
  
  <!-- START DATATABLE 3-->
  <div class="row">
  <div class="col-lg-12">
   <div class="panel panel-default">
    <div class="panel-heading" style="border-bottom:1px solid #eee;">
    <form class="form-inline" id="searchForm" method="post" action="<%=path %>/page/messageSearch.action">
    <div class="form-group"> <b>创建时间: </b>
     <div class="datetimepicker input-group date mb-lg" data-pick-time="false">
     <input type="text" class="form-control" id="searchDateStart" name="searchDateStart" value='' disabled="disabled">
     <span class="input-group-addon"> <span class="fa-calendar fa"></span> </span> </div>
     <span style="margin-top:-8px;">—</span>
     <div class="datetimepicker input-group date mb-lg" data-pick-time="false">
     <input type="text" class="form-control" id="searchDateEnd" name="searchDateEnd" value='' disabled="disabled">
     <span class="input-group-addon"> <span class="fa-calendar fa"></span> </span> </div>
    </div>
    <div class="form-group">
        <b>接收者:</b>
        <input type="text" class="form-control mb-lg" id="receiver" name="receiver" value=''>
       </div>
    <div class="form-group"> <a style="margin:-10px 0 0 5px; float:left;" href="javascript:void(0);" class="mb-sm btn btn-primary" type="button" id="searchMessage">搜索</a> </div>
     <input type="hidden" id="pageNo" name="pageNo" value=''>
    </form>
   </div>
   <div class="table-responsive">
    <table class="table table-bordered table-hover dataTable no-footer" id="table-ext-1" >
    <thead>
     <tr>
     <th style="width:300px;">描述</th>
     <th class="sorting center" tabindex="0" aria-controls="datatable1" rowspan="1" colspan="1" style="width: 86px;" aria-label="Rendering engine: activate to sort column ascending">发送者</th>
     <th class="sorting center" tabindex="0" aria-controls="datatable1" rowspan="1" colspan="1" style="width: 86px;" aria-label="Rendering engine: activate to sort column ascending">接收者</th>
     <th class="sorting center" tabindex="0" aria-controls="datatable1" rowspan="1" colspan="1" style="width: 86px;" aria-label="Rendering engine: activate to sort column ascending">创建时间</th>
     <th class="th150 center">操作</th> 
     </tr>
    </thead>
    <tbody id="message_body">
    
    </tbody>
    <tfoot>
     <tr> </tr>
    </tfoot>
    </table>
   </div>
   
   <div class="panel-footer">
    <div class="row">
    <div style="line-height:35px;" class="col-lg-3">
     <div class="input-group pull-left" id="message_showLines"> </div>
    </div>
    <div class="col-lg-9"></div>
     <div class="tcdPageCode"></div>
    </div>
   </div>
   </div>
  </div>
  </div>
  <!-- END DATATABLE 3--> 
  
 </div>
 <!-- END Page content--> 
 </section>
 <!-- END Main section--> 
</div>
<!-- END Main wrapper--> 

<!-- START modal-->
<div id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" class="modal" >
 <div class="modal-dialog" style="width:600px;">
 <div class="modal-content">
  <div class="modal-header">
  <button type="button" data-dismiss="modal" aria-hidden="true" class="close">×</button>
  <h4 id="myModalLabel" class="modal-title">新建应用</h4>
  </div>
  <div class="modal-body" style="padding-right:20px;">
  <form method="get" action="/" class="form-horizontal">
   <fieldset>
   <div class="form-group" style="padding-bottom:5px;">
    <label class="col-sm-2 control-label">名称</label>
    <div class="col-sm-10">
    <input type="text" class="form-control">
    </div>
   </div>
    <div class="form-group" style="margin-top:10px;">
    <label class="col-sm-2 control-label">描述</label>
    <div class="col-sm-10">
    <input type="text" class="form-control">
    </div>
   </div>
   
   
   <div class="form-group" style="margin-top:10px;">
    <label class="col-sm-2 control-label">URL</label>
    <div class="col-sm-10">
    <input type="text" class="form-control">
    </div>
   </div>
   
   
   <div class="form-group" style="margin-top:5px;">
    <label class="col-sm-2 control-label">类别</label>
    <div class="col-sm-10">
     <select class="form-control m-b" name="account">
      <option>Web</option>
      <option>Mobile</option>
     </select></div>
     </div>
     
     <div class="form-group" style="margin-top:5px;">
    <label class="col-sm-2 control-label">授权模式</label>
    <div class="col-sm-10">
     <select class="form-control m-b" name="account">
      <option>授权</option>
      <option>不授权</option>
     </select></div>
     </div>
     
     <div class="form-group" style="margin-top:10px;">
    <label class="col-sm-2 control-label">LOGO</label>
    <div class="col-sm-10">
    <input type="button" class="form-control">
    </div>
   </div>
   
   </fieldset>
  </form>
  </div>
  
  </fieldset>
  <div class="modal-footer">
  <button type="button" data-dismiss="modal" class="btn btn-default">取消</button>
  <button type="button" class="btn btn-primary">确定</button>
  </div>
 </div>
 </div>
</div>
</div>
<div id="myModal2" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" class="modal">
 <div class="modal-dialog" style="width:650px;">
 <div class="modal-content">
  <div class="modal-header">
  <button type="button" data-dismiss="modal" aria-hidden="true" class="close">×</button>
  <h4 id="myModalLabel" class="modal-title">修改密码</h4>
  </div>
  <div class="modal-body">
  <form method="get" action="/" class="form-horizontal">
   <fieldset>
   <div class="form-group" style="padding-bottom:5px;">
    <label class="col-sm-2 control-label">原密码</label>
    <div class="col-sm-10">
    <input type="text" class="form-control">
    </div>
   </div>
   <div class="form-group" style="padding-bottom:5px;">
    <label class="col-sm-2 control-label">新密码</label>
    <div class="col-sm-10">
    <input type="password" name="password" class="form-control">
    </div>
   </div>
   <div class="form-group" style="padding-bottom:5px;">
    <label class="col-sm-2 control-label">确认密码</label>
    <div class="col-sm-10">
    <input type="password" name="password" class="form-control">
    </div>
   </div>
   </fieldset>
  </form>
  </div>
  <div class="modal-footer">
  <button type="button" data-dismiss="modal" class="btn btn-default">关闭</button>
  <button type="button" class="btn btn-primary">Save changes</button>
  </div>
 </div>
 </div>
</div>
<div id="myModal3" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" class="modal">
 <div class="modal-dialog" style="width:600px;">
 <div class="modal-content">
  <div class="modal-header">
  <button type="button" data-dismiss="modal" aria-hidden="true" class="close">×</button>
  <h4 id="myModalLabel" class="modal-title">编辑节目特殊单</h4>
  </div>
  <div class="modal-body">
  <form method="get" action="/" class="form-horizontal">
   <fieldset>
   <div class="form-group" style="padding-bottom:5px;">
    <label class="col-sm-2 control-label">表单标题</label>
    <div class="col-sm-10">
    <input type="text" class="form-control">
    </div>
   </div>
   </fieldset>
  </form>
  </div>
  <div class="modal-footer">
  <button type="button" data-dismiss="modal" class="btn btn-default">关闭</button>
  <button type="button" class="btn btn-primary">确定</button>
  </div>
 </div>
 </div>
</div>
<!-- END modal --> 
<form method="post" id="pageForm" name="pageForm"
  action="<%=path%>/page/message_search.action">
  <input type="hidden" id="pageNo" name="pageNo" value="" />
 </form>
<!-- START Scripts--> 
<!-- Main vendor Scripts--> 
<script src="<%=path %>/vendor/jquery/jquery.min.js"></script> 
<script src="<%=path %>/vendor/bootstrap/js/bootstrap.min.js"></script> 
<!-- Plugins--> 
<script src="<%=path %>/vendor/chosen/chosen.jquery.min.js"></script> 
<script src="<%=path %>/vendor/slider/js/bootstrap-slider.js"></script> 
<script src="<%=path %>/vendor/filestyle/bootstrap-filestyle.min.js"></script> 
<!-- Animo--> 
<script src="<%=path %>/vendor/animo/animo.min.js"></script> 
<!-- Sparklines--> 
<script src="<%=path %>/vendor/sparklines/jquery.sparkline.min.js"></script> 

<!-- MomentJs and Datepicker--> 
<script src="<%=path %>/vendor/moment/min/moment-with-langs.js"></script> 
<script src="<%=path %>/vendor/datetimepicker/js/bootstrap-datetimepicker.min.js"></script> 

<!-- Slimscroll--> 
<script src="<%=path %>/vendor/slimscroll/jquery.slimscroll.min.js"></script> 
<!-- Store + JSON--> 
<script src="<%=path %>/vendor/store/store+json2.min.js"></script> 
<!-- ScreenFull--> 
<script src="<%=path %>/vendor/screenfull/screenfull.min.js"></script> 
<!-- START Page Custom Script--> 
<!-- Data Table Scripts--> 
<script src="<%=path %>/vendor/datatable/media/js/jquery.dataTables.min.js"></script> 
<script src="<%=path %>/vendor/datatable/extensions/datatable-bootstrap/js/dataTables.bootstrap.js"></script> 
<script src="<%=path %>/vendor/datatable/extensions/datatable-bootstrap/js/dataTables.bootstrapPagination.js"></script> 
<script src="<%=path %>/vendor/datatable/extensions/ColVis/js/dataTables.colVis.min.js"></script> 
<!-- START Page Custom Script--> 
<script src="<%=path %>/vendor/wizard/js/bwizard.min.js"></script> 
<!-- Form Validation--> 
<script src="<%=path %>/vendor/parsley/parsley.min.js"></script> 
<!-- END Page Custom Script--> 
<!-- App Main--> 
<script src="<%=path %>/app/js/app.js"></script> 
<script src="<%=path %>/vendor/sweetalert/lib/sweet-alert.min.js"></script>
 <script src="<%=path %>/script/message.js"></script>
 <script src="<%=path %>/page/js/page.js"></script>
<!-- END Scripts-->

</body>
</html>

2. example.js加载的时候,再去异步请求获取页面数据(表格、分页等),再动态创建表,分页链接等

$(function(){
 initTable();
 
 $("#searchMessage").on("click",function(){
  messageSearch(pageNo);
 });


 //获取message列表 "pageNo" : pageNo
 function initTable(){
  $.ajax({
   url : basePath + "page/message_list.action",
   type : "get",
   dataType : "json",
   success : function(dataMap){
    createTBody(dataMap);
    createTFoot(dataMap);
   },
   error : function(errorData){
   }
  });
 }
 //查询message
 function messageSearch(pageNo){
  var searchDateStart = $("#searchDateStart").val();
  var searchDateEnd = $("#searchDateEnd").val();
  var startDate = new Date(searchDateStart);
  var endDate = new Date(searchDateEnd);
  var num = endDate - startDate;
  if(num<0){
   $("#searchDateEnd").val('');
   swal({
    title: "结束日期不能晚于开始日期",
    text: "",
    type: "error"
   });
   return false;
  }
  var receiver = $("#receiver").val();
  $.ajax({
   url : basePath + "page/message_search.action",
   type : "POST",
   data : {
    "pageNo" : pageNo,
    "searchDateStart" : searchDateStart,
    "searchDateEnd" : searchDateEnd,
    "receiver" : receiver
   },
   dataType : "json",
   success : function(dataMap){
    createTBody(dataMap);
    createTFoot(dataMap);
   },
   error : function(errorData){
    
   }
  });
 }
 
 function createTBody(dataMap){
  if(dataMap!=null){
   var messageListPage = dataMap.messageListPage;
   var html = [];
   for(var i=0; i<messageListPage.length; i++){
    var message = messageListPage[i];
    var cTime = message.createtime.replace(/T/g," ");
    html.push('<tr class="gradeX center">');
    html.push('<td style="text-align:left;">'+message.content+'</td>');
    html.push('<td>' + message.provider + '</td>');
    html.push('<td>' + message.receiver + '</td>');
    html.push('<td>' + cTime + '</td>');
    html.push('<td message_id=' + message.id + '><a href="#" class="message_del btn btn-danger btn-xs">删除</a></td>');
    html.push('</tr>');
   }
   $("#message_body").empty().html(html.join(''));
  }
 }
 
 function createTFoot(dataMap){
  if(dataMap!=null){
   startNum = dataMap.startNum;
   stopNum = dataMap.stopNum;
   totalCount = dataMap.totalCount;
   pageNo = dataMap.pageNo;
   pageSize = dataMap.pageSize;
   var str = '显示 ' + startNum + '至' + stopNum + '项 , 共' + totalCount +' 项。';
   $("#message_showLines").html(str);
  }
 }
 
 
 $('#message_body').on('click','a.message_del',function(){
  var message_id = $(this).parent("td").attr("message_id");
  swal({
   title : "确认要删除吗?",
   text : "删除后将不能恢复!",
   type : "warning",
   showCancelButton : true,
   confirmButtonColor : "#DD6B55",
   confirmButtonText : "Yes, delete it!",
   cancelButtonText : "No, cancel plx!",
   closeOnConfirm : false,
   closeOnCancel : false
  }, function(isConfirm) {
   if (isConfirm) {
    $.ajax({
     url:basePath + "page/message_del.action",
     data:{
      "id":message_id
     },
     type:"get",
     dataType:"json",
     success:function(dataMap){
      if(dataMap!=null && dataMap.message=="success"){
       swal("删除!",
         "已经成功删除.",
       "success");
       initTable();
      }else{
       swal("删除!",
         "删除失败.",
       "error");
      }
     },
     error : function(errorMsg){
      swal("删除失败!",
        errorMsg,
      "error");
     }
     
    });
   } else {
    swal("Cancelled", "Your imaginary file is safe :)",
      "error");
   }
  });
 });
 
 $('.tcdPageCode').extendPagination({
  pageId : pageNo,
  totalCount : totalCount,
  showPage : 5,
  limit : pageSize,
  callback : function(pageNo, limit, totalCount) {
   messageSearch(pageNo);
  }
 });
 
});

注意: 表格是动态创建的,其中的按钮绑定事件时,一定要先找到它的父节点(或祖先节点),再到指定节点,绑定事件

如上面的 $("#serviceRepo_body").on('click','a.record_view',function(){});

分页js插件(page.js), 同时引入jquery-1.11.1.min.js 和 bootstrap.js

/**
 * Created by Hope on 2014/12/28.
 */
(function ($) {
 $.fn.extendPagination = function (options) {
  var defaults = {
   pageId:'',
   totalCount: '',
   showPage: '10',
   limit: '5',
   callback: function () {
    return false;
   }
  };
  $.extend(defaults, options || {});
//  alert(defaults.pageId);
  if (defaults.totalCount == '') {
   //alert('总数不能为空!');
   $(this).empty();
   return false;
  } else if (Number(defaults.totalCount) <= 0) {
   //alert('总数要大于0!');
   $(this).empty();
   return false;
  }
  if (defaults.showPage == '') {
   defaults.showPage = '10';
  } else if (Number(defaults.showPage) <= 0)defaults.showPage = '10';
  if (defaults.limit == '') {
   defaults.limit = '5';
  } else if (Number(defaults.limit) <= 0)defaults.limit = '5';
  var totalCount = Number(defaults.totalCount), showPage = Number(defaults.showPage),
   limit = Number(defaults.limit), totalPage = Math.ceil(totalCount / limit);
  if (totalPage > 0) {
   var html = [];
   html.push(' <ul class="pagination">');
   html.push(' <li class="previous"><a href="#">«</a></li>');
   html.push('<li class="disabled hidden"><a href="#">...</a></li>');
   if (totalPage <= showPage) {
    for (var i = 1; i <= totalPage; i++) {
     if (i == defaults.pageId) html.push(' <li class="active"><a href="#">' + i + '</a></li>');
     else html.push(' <li><a href="#">' + i + '</a></li>');
    }
   } else {
    for (var j = 1; j <= showPage; j++) {
     if (j == defaults.pageId) html.push(' <li class="active"><a href="#">' + j + '</a></li>');
     else html.push(' <li><a href="#">' + j + '</a></li>');
    }
   }
   html.push('<li class="disabled hidden"><a href="#">...</a></li>');
   html.push('<li class="next"><a href="#">»</a></li></ul>');
   $(this).html(html.join(''));
   if (totalPage > showPage) $(this).find('ul.pagination li.next').prev().removeClass('hidden');

   var pageObj = $(this).find('ul.pagination'), preObj = pageObj.find('li.previous'),
    currentObj = pageObj.find('li').not('.previous,.disabled,.next'),
    nextObj = pageObj.find('li.next');

   function loopPageElement(minPage, maxPage) {
    var tempObj = preObj.next();
    for (var i = minPage; i <= maxPage; i++) {
     if (minPage == 1 && (preObj.next().attr('class').indexOf('hidden')) < 0)
      preObj.next().addClass('hidden');
     else if (minPage > 1 && (preObj.next().attr('class').indexOf('hidden')) > 0)
      preObj.next().removeClass('hidden');
     if (maxPage == totalPage && (nextObj.prev().attr('class').indexOf('hidden')) < 0)
      nextObj.prev().addClass('hidden');
     else if (maxPage < totalPage && (nextObj.prev().attr('class').indexOf('hidden')) > 0)
      nextObj.prev().removeClass('hidden');
     var obj = tempObj.next().find('a');
     if (!isNaN(obj.html()))obj.html(i);
     tempObj = tempObj.next();
    }
   }

   function callBack(curr) {
    defaults.callback(curr, defaults.limit, totalCount);
   }

   currentObj.click(function (event) {
    event.preventDefault();
    var currPage = Number($(this).find('a').html()), activeObj = pageObj.find('li[class="active"]'),
     activePage = Number(activeObj.find('a').html());
    if (currPage == activePage) return false;
    if (totalPage > showPage) {
     var maxPage = currPage, minPage = 1;
     if (($(this).prev().attr('class'))
      && ($(this).prev().attr('class').indexOf('disabled')) >= 0) {
      minPage = currPage - 1;
      maxPage = minPage + showPage - 1;
      loopPageElement(minPage, maxPage);
     } else if (($(this).next().attr('class'))
      && ($(this).next().attr('class').indexOf('disabled')) >= 0) {
      if (totalPage - currPage >= 1) maxPage = currPage + 1;
      else maxPage = totalPage;
      if (maxPage - showPage > 0) minPage = (maxPage - showPage) + 1;
      loopPageElement(minPage, maxPage)
     }     
    }
    activeObj.removeClass('active');
    $.each(currentObj, function (index, thiz) {
     if ($(thiz).find('a').html() == currPage) {
      $(thiz).addClass('active');
      callBack(currPage);
     }
    });
   });
   preObj.click(function (event) {
    event.preventDefault();
    var activeObj = pageObj.find('li[class="active"]'), activePage = Number(activeObj.find('a').html());
    if (activePage <= 1) return false;
    if (totalPage > showPage) {
     var maxPage = activePage, minPage = 1;     
     if ((activeObj.prev().prev().attr('class'))
      && (activeObj.prev().prev().attr('class').indexOf('disabled')) >= 0) {
      minPage = activePage - 1;
      if (minPage > 1) minPage = minPage - 1;
      maxPage = minPage + showPage - 1;
      loopPageElement(minPage, maxPage);
     }
    }
    $.each(currentObj, function (index, thiz) {
     if ($(thiz).find('a').html() == (activePage - 1)) {
      activeObj.removeClass('active');
      $(thiz).addClass('active');
      callBack(activePage - 1);
     }
    });
   });
   nextObj.click(function (event) {
    event.preventDefault();
    var activeObj = pageObj.find('li[class="active"]'), activePage = Number(activeObj.find('a').html());
    if (activePage >= totalPage) return false;
    if (totalPage > showPage) {
     var maxPage = activePage, minPage = 1;     
//     if ((activeObj.next().next().attr('class'))
//      && (activeObj.next().next().attr('class').indexOf('disabled')) >= 0) {
//      maxPage = activePage + 2;
//      if (maxPage > totalPage) maxPage = totalPage;
//      minPage = maxPage - showPage + 1;
//      loopPageElement(minPage, maxPage);
//     }
     if ((activeObj.next().next().attr('class'))
       && (activeObj.next().next().attr('class').indexOf('disabled')) >= 0) {
      maxPage = activePage + 2;
      if (maxPage > totalPage) maxPage = totalPage;
      minPage = maxPage - showPage + 1;
      loopPageElement(minPage, maxPage);
     }
    }
    $.each(currentObj, function (index, thiz) {
     if ($(thiz).find('a').html() == (activePage + 1)) {
      activeObj.removeClass('active');
      $(thiz).addClass('active');
      callBack(activePage + 1);
     }
    });
   
   });
  }
 };
})(jQuery);

3.项目采用struts2, 返回json, 在struts中配置, 并在action中使用map来封装数据, 并添加get方法

struts.xml

<package name="message" namespace="/" extends="struts-default, json-default">
  <action name="message_*" class="messageAction" method="{1}">
   <result name="index">/WEB-INF/jsp/message.jsp</result>
   <result name="success" type="json">
    <param name="root">dataMap</param>
   </result>
  </action>
 </package>

action

package com.cdv.mediastar.action;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.json.annotations.JSON;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.cdv.mediastar.model.Message;
import com.cdv.mediastar.service.MessageService;
import com.cdv.mediastar.util.PageParameter;
import com.opensymphony.xwork2.ActionSupport;

@Scope("request")
@Controller("messageAction")
public class MessageAction extends ActionSupport {

 /**
  * 
  */
 private static final long serialVersionUID = 3731009117710718470L;

 private Logger logger = Logger.getLogger(MessageAction.class);
 @Resource
 private MessageService messageService;
 
 Map<String, Object> dataMap = new HashMap<String, Object>();
 
 public Map<String, Object> getDataMap() {
  return dataMap;
 }


 public String index(){
  HttpServletRequest request = ServletActionContext.getRequest();
  PageParameter page = new PageParameter();
  int pageNo = page.getPageNo();
  int totalCount = messageService.count(null, null, null, 0);
  int totalPage = totalCount%page.getPageSize()==0?totalCount/page.getPageSize():totalCount/page.getPageSize()+1;
  int startNum = 1, stopNum = 1;
  startNum = (pageNo-1)*page.getPageSize()+1;
  if((startNum+page.getPageSize()-1)<=totalCount){
   stopNum = startNum+page.getPageSize()-1;
  }else{
   stopNum = totalCount;
  }
  page.setTotalCount(totalCount);
  page.setTotalPage(totalPage);
  request.setAttribute("page", page);
  request.setAttribute("startNum", startNum);
  request.setAttribute("stopNum", stopNum);
  return "index";
 }
 
 public String list(){
  dataMap.clear(); 
  PageParameter page = new PageParameter();
  int s = 0, max = page.getPageSize();
  List<Message> messageListPage = messageService.find(null, null, null, s, max);
  int totalCount = messageService.count(null, null, null, 0);
  int totalPage = totalCount%page.getPageSize()==0?totalCount/page.getPageSize():totalCount/page.getPageSize()+1;
  page.setTotalCount(totalCount);
  page.setTotalPage(totalPage);
  int startNum = 0, stopNum = 0;
  startNum = 1;
  if((startNum+page.getPageSize()-1)<=totalCount){
   stopNum = startNum+page.getPageSize()-1;
  }else{
   stopNum = totalCount;
  }
  dataMap.put("startNum", startNum);
  dataMap.put("stopNum", stopNum);
  dataMap.put("totalCount", totalCount);
  dataMap.put("totalPage", totalPage);
  dataMap.put("pageNo", page.getPageNo());
  dataMap.put("messageListPage", messageListPage);
  return "success";
 }
 
 public String del(){
  dataMap.clear();
  HttpServletRequest request = ServletActionContext.getRequest();
  Long id = Long.parseLong(request.getParameter("id"));
  int deleteFlag = messageService.delete(id);
  if(deleteFlag>0){
   dataMap.put("message", "success");
  }else{
   dataMap.put("message", "error");
  }
  logger.info("rocky>>>>>>>>>>>>delete message flag======"+deleteFlag);
  return "success";
 }
 
 public String search() throws ParseException, IOException{
  dataMap.clear(); 
  HttpServletRequest request = ServletActionContext.getRequest();
  Date from = null, to = null ;
  String searchDateStart = request.getParameter("searchDateStart");
  if(searchDateStart!=null && searchDateStart!="") {
   from = new SimpleDateFormat("MM/dd/yyyy").parse(searchDateStart);
  }
  String searchDateEnd = request.getParameter("searchDateEnd");
  if(searchDateEnd!=null && searchDateEnd!="") {
   to = new SimpleDateFormat("MM/dd/yyyy").parse(searchDateEnd);
  }
  String receiver = request.getParameter("receiver");
  String pageNoStr = request.getParameter("pageNo");
  PageParameter page = new PageParameter();
  int pageNo = page.getPageNo();
  int s = 0, max = page.getPageSize();
  if(pageNoStr!=null && pageNoStr!=""){
   pageNo = Integer.parseInt(pageNoStr);
   s = (pageNo-1)*page.getPageSize();
  }
  List<Message> messageListPage = messageService.find(receiver, from, to, s, max);
  int totalCount = messageService.count(receiver, from, to, 0);
  int totalPage = totalCount%page.getPageSize()==0?totalCount/page.getPageSize():totalCount/page.getPageSize()+1;
  int startNum = 0, stopNum = 0;
  startNum = (pageNo-1)*page.getPageSize()+1;
  if((startNum+page.getPageSize()-1)<=totalCount){
   stopNum = startNum+page.getPageSize()-1;
  }else{
   stopNum = totalCount;
  }
  dataMap.put("startNum", startNum);
  dataMap.put("stopNum", stopNum);
  dataMap.put("pageNo", pageNo);
  dataMap.put("totalCount", totalCount);
  dataMap.put("pageSize", page.getPageSize());
  dataMap.put("searchDateStart", searchDateStart);
  dataMap.put("searchDateEnd", searchDateEnd);
  dataMap.put("receiver", receiver);
  dataMap.put("messageListPage", messageListPage);
  return "success";
 }
}

以上就是小编为大家带来的jsp页面 列表 展示 ajax异步实现方法全部内容了,希望大家多多支持路饭~