json实现jsp分页

 

json 在上篇文章已有详细介绍,json的既简单易懂,又传输迅速。并且能和javascript很好的融为一体。

 

在不需要添加jar的前提下,能够很好完成jsp分页问题。

下面具体介绍分页实例:


效果如图所示,采用jsp+servlet技术

首先:编写一个javaBean             User.java

 

package bean;

public class User {
	private int id;
	private String name;
	private String password;
	private int age;
	public User() {
		super();
	}
	public User(int id, String name, String password, int age) {
		super();
		this.id = id;
		this.name = name;
		this.password = password;
		this.age = age;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		 //{'id':1,'name':'zhangsan','password':'123','age':1}
		return "{'id':"+id+",'name':'"+name+"','password':'"+password+"','age':"+age+"}";
	}
	
}

这里需要注意的 就是 toString的方法的改变

然后:我们来编写它的control 层和Dao层

为了简化代码,便于取值,数据库暂写为一个集合大笑 

可以看到,

1.service 接收request请求 得到页面所要展示当前页(为第page页)

2.创建一个字符串,向内依次添加 从数据库DB 得到的user,并将所有数据封装

[{},{},{}]

 

3.将此字符串 返回到请求页面

 

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.LinkedList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bean.User;

public class Paging extends HttpServlet {
	public static final int PER_PAGE = 3;
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//分页     数据源    当前得到第几页的记录    每页显示多少条
		int page = Integer.parseInt(request.getParameter("page"));
		// page = 1   i = 0
		//page = 2 3
		int length = 0;//记录当前拿了多少条
		StringBuffer sb = new StringBuffer();
		sb.append("[");
		//[{},{},{}]
		String message = null;
		if(page >= 1 && page <= 3){
			for (int i = (page-1)*PER_PAGE; i < DB.list.size()&&length < PER_PAGE; i++) {
				User u = DB.list.get(i);
				 sb.append(u.toString()+",");
				length++;
			}
			if(length > 0){
				message = sb.substring(0, sb.length()-1)+"]";
			}else{
				message = sb.toString()+"]";
			}
		}else{
			response.setContentType("text/html;charset=utf-8");
			response.getWriter().println("捣乱");
			return;
		}
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().println(message);
	}
}
class DB{
	public static List<User> list = new LinkedList<User>();
	static{
		list.add(new User(1,"zhangsan","zs",34));
		list.add(new User(2,"lisi","ls",34));
		list.add(new User(3,"a","h",34));
		list.add(new User(4,"b","d",34));
		list.add(new User(5,"c","g",34));
		list.add(new User(6,"d","a",34));
		list.add(new User(7,"e","d",34));
		list.add(new User(8,"f","e",34));
		list.add(new User(9,"g","a",34));
	}
}


之后 :jsp的填写,通过ajax异步提交page,然后得到相应的字符串

 

 

   var mgs = xmlHttpRequest.responseText;
	    var persons = mgs.evalJSON();

将json数据解析 并添加到显示的区域

 

 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'regist.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<script type="text/javascript" src="js/prototype1.6.js"></script>
	<script type="text/javascript" src="js/jquery-1.4.4.js"></script>
	<script type="text/javascript">
	 var paging = 0;
	 // 
	 function page(p){
	    /*if(p == 'next' && paging < 3){
	      paging ++;
	    }else if(p == 'last' && paging > 1) {
	      paging --;
	    }else{
	     alert('错误');
	    }*/
	    if(p == 'next' && paging < 3){
	      paging ++;
	      if(paging > 1){
	      	$(":button:eq(0)").removeAttr('disabled');
	      }
	      if(paging == 3){
	        $(":button:eq(1)").attr('disabled','disabled');
	      }
	     }else if(p == 'last' && paging > 1){
	     	paging --;
	     	$(":button:eq(1)").removeAttr('disabled');
	     	if(paging == 1){
	     	 $(":button:eq(0)").attr('disabled','disabled');
	     	}
	     }
	    createXmlHttpRequest();
	    xmlHttpRequest.onreadystatechange=back;
	    var url = encodeURI("/json_page/Paging?page="+paging);
	    xmlHttpRequest.open("GET",url,true);
	    xmlHttpRequest.send(null);
	 }
	 //假设名字为xmlHttpRequest
	 function createXmlHttpRequest(){
	   if(window.ActiveXObject){
	     xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
	   }else{
	    xmlHttpRequest = new XmlHttpRequest();
	   }
	 }
	 //回调函数
	 function back(){
	   if( xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){
	     var mgs = xmlHttpRequest.responseText;
	    var persons = mgs.evalJSON();
	    //alert(mgs);
	    $("table").empty();
	    $("table").append( $("<tr><td>id</td><td>用户名</td><td>密码</td><td>age</td></tr>"));
	    for(var i = 0 ; i < persons.length;i++){
	     var person = persons[i];
	     var $tr = $("<tr><td>"+person.id+"</td><td>"+person.name+"</td><td>"+person.password+"</td><td>"+person.age+"</td></tr>");
	     $("table").append($tr);
	    }
	   }
	 }
	</script>
  </head>
  <body>
   <input type="button" disabled="disabled" value="上一页" onclick="page('last');"/><input type="button" value="下一页" onclick = "page('next');"/>
    <table>
     <tr><td>id</td><td>用户名</td><td>密码</td><td>age</td></tr>
    </table>
  </body>
</html>


另外:要有这两个js哦

<script type="text/javascript" src="js/prototype1.6.js"></script>
<script type="text/javascript" src="js/jquery-1.4.4.js"></script>

 

posted @ 2013-04-25 13:03  javawebsoa  Views(330)  Comments(0Edit  收藏  举报