首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

模糊查询分页兑现

2012-10-11 
模糊查询分页实现模糊查询的分页模糊查询返回的是一个list列表,若数据庞大时需要进行分页显示。以下案例将

模糊查询分页实现

模糊查询的分页

模糊查询返回的是一个list列表,若数据庞大时需要进行分页显示。以下案例将介绍数据的分页显示操作。

misty to search.jsp.java<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@taglib uri="/struts-tags" prefix="s"%><%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 'list.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"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript"src="${pageContext.request.contextPath}/js/jquery-1.6.js"></script><script type="text/javascript"><!--Jquery的Ajax请求处理-->function mistyByName(npage){<!--清空操作-->$("#susers").empty();$("#page").empty();var name=$("#uname").val();var nowpage;var countpage;  $.ajax({    type:"post",    url:"csdn/user_mistyByName",    data:"user.name="+name+"&pagination.nowpage="+npage,    dataType:"json",    success:function(data){      nowpage=data.pagination.nowpage;      countpage=data.pagination.countpage;         $.each(data.users,function(i,entity){         <!--创建新行-->         var  tr=$("<tr>");         <!--创建新列-->         var td1=$("<td>").text(entity.id);          var td2=$("<td>").text(entity.name);           var td3=$("<td>").text(entity.pass);            var td4=$("<td>").text(entity.rdate);             var td5=$("<td>");             var upbtn=$("<input>").attr("type","button").val("修改").click(function(){             alert("修改的操作");             }).appendTo(td5);              var delbtn=$("<input>").attr("type","button").val("删除").click(function(){             alert("删除的操作");             }).appendTo(td5);    <!—将td添加到tr中-->             tr.append(td1);              tr.append(td2);               tr.append(td3);                tr.append(td4);                 tr.append(td5);                  tr.appendTo($("#susers"));         });    },    error:function(data){    }});<!—分页操作-->var  span1=$("<span>");    var a1=$("<a>").attr("href","javascript:void(0)").text("首页").appendTo(span1).click(function(){       var napage=1;     mistyByName(npage);    });    var span2=$("<span>");     var a2=$("<a>").attr("href","javascript:void(0)").text("上一页").appendTo(span2).click(function(){         var npage = nowpage-1;         if(npage<=1){           npage=1;         }         mistyByName(npage);       });var span3 =$("<span>");        var a3=$("<a>").attr("href","javascript:void(0)").text("下一页").appendTo(span3).click(function(){         var npage = nowpage+1;         if(npage>=countpage){           npage=countpage;         }         mistyByName(npage);       });var span4 =$("<span>");             var a4=$("<a>").attr("href","javascript:void(0)").text("末页").appendTo(span4).click(function(){                 mistyByName(countpage);       });      <!—将首页、上一页、下一页、末页添加到id=”page”的div中-->      span1.appendTo($("#page"));      span2.appendTo($("#page"));      span3.appendTo($("#page"));      span4.appendTo($("#page"));}</script></head><body><div><div><h1>根据某个名称实现模糊查询</h1><!-- 是含有|还是以什么开头 --><input type="text" name="user.name" id="uname" /><input type="button" value="模糊查询" onclick="mistyByName(1)" /></div><table><thead><tr><th>序号</th><th>用户名</th><th>密码</th><th>注册时间</th><th>操作</th></tr></thead><tbody id="susers"></tbody></table><div id="page"></div></div></body></html>

?

解析:该页面执行onclick="mistyByName(1)"事件,将文本框中输入的值以及pagination.nowpage=1通过post方法传到action中。

………….

将通过计算得到的nowpage以及countpage的值在jsp中计算首页上一页下一页末页的操作,每点一次首页 上一页 下一页 末页 都将执行一次function函数。

UserAction.javapublic class UserAction extends ActionSupport {/** *  */private static final long serialVersionUID = 1L;private UserServiceImpl userServiceImpl;/* 封装分页信息 */private Pagination pagination;public UserServiceImpl getUserServiceImpl() {return userServiceImpl;}/* 依赖注入方式 */public void setUserServiceImpl(UserServiceImpl userServiceImpl) {this.userServiceImpl = userServiceImpl;}public Pagination getPagination() {return pagination;}public void setPagination(Pagination pagination) {this.pagination = pagination;}private List<User> users;private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}public List<User> getUsers() {return users;}public void setUsers(List<User> users) {this.users = users;}/* 模糊查询的分页 */@SuppressWarnings("unchecked")public String mistyByName(){String hql="from User as u where u.name like '%"+user.getName()+"%'";pagination.getSelectCount(hql, pagination.getNowpage());users=pagination.getEntities();return "mistyByName";}}

?

解析:

在action中执行mistyByName()方法,在该方法中根据传来的name值通过user.getName()方法得到传来的值定义一个hql语句,通过pagination.getNowpage()方法获取从页面传来的当前页,将hql语句和当前页信息传到pagination.java类中的getSelectCount()方法中。在此方法中封装分页的所有信息和分页方法。当前页所显示的信息即entities需要通过pagination.getEntities()方法重新获取。执行成功后将根据xml文件返回到相应的页面。

Pagination.javapublic class Pagination extends HibernateDaoSupport implements Serializable {private static final long serialVersionUID = 1L;/* 封装分页信息 *//* 当前页 */private int nowpage;/* 总页数 */private int countpage;/* 总记录数 */private int countrecord;/* 当前页信息 */private List entities;/* 每页显示的条数 */private static final int PAGESIZE = 5;/* 默认无参构造器 */public Pagination() {super();// TODO Auto-generated constructor stub}//实现nowpage、countpage、countrecord、entities所对应的set()、get()方法/* 条件查询获取信息      hql语句是你拼接的sql语句  此语句可以通用 */public void getSelectCount(final String hql, int nowpage) {/* 获取总记录数 */  long is =(Long)  getHibernateTemplate().find("select count(*)  "+hql).get(0);   countrecord =(int) is; /* 获取总页数 */countpage = countrecord % PAGESIZE == 0 ? countrecord / PAGESIZE: countrecord / PAGESIZE + 1;/* 计算开始的索引 */final int startIndex = (nowpage - 1) * PAGESIZE;/* * 实现分页的方法 ------>显示出每页的记录信息 setMaxResults()---->每页显示的条数 * setFirstREsult()---->每页显示的记录是从第几条记录开始的 */getHibernateTemplate().execute(new HibernateCallback() {public Object doInHibernate(Session session)throws HibernateException, SQLException {entities = session.createQuery(hql).setMaxResults(PAGESIZE).setFirstResult(startIndex).list();return entities;}});}}

?

Struts-user.xml<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN""http://struts.apache.org/dtds/struts-2.1.7.dtd"><struts><package name="dxl" extends="json-default" namespace="/csdn"><global-results><result name="input">/index.jsp</result></global-results><action name="user_*" method="{1}"><result name="mistyByName" type="json"><param name="includeProperties">pagination\.nowpage,pagination\.countpage, users\[\d+\]\.id, users\[\d+\]\.name, users\[\d+\]\.pass,users\[\d+\]\.rdate</param></result></action></package></struts>

?

解析:将 从pagination类中得到的nowpage、countpage传回到jsp页面中。

总结:实现分页大概所经路径

jsp---action-----pagination----action----xml----jsp整个过程都有带值传递

?

热点排行