第一篇文章
2009-05-17 17:34
387 查看
模糊查询的分页
模糊查询返回的是一个list列表,若数据庞大时需要进行分页显示。以下案例将介绍数据的分页显示操作。
解析:该页面执行onclick="mistyByName(1)"事件,将文本框中输入的值以及pagination.nowpage=1通过post方法传到action中。
………….
将通过计算得到的nowpage以及countpage的值在jsp中计算首页上一页下一页末页的操作,每点一次首页 上一页 下一页 末页 都将执行一次function函数。
解析:
在action中执行mistyByName()方法,在该方法中根据传来的name值通过user.getName()方法得到传来的值定义一个hql语句,通过pagination.getNowpage()方法获取从页面传来的当前页,将hql语句和当前页信息传到pagination.java类中的getSelectCount()方法中。在此方法中封装分页的所有信息和分页方法。当前页所显示的信息即entities需要通过pagination.getEntities()方法重新获取。执行成功后将根据xml文件返回到相应的页面。
解析:将 从pagination类中得到的nowpage、countpage传回到jsp页面中。
总结:实现分页大概所经路径
jsp---action-----pagination----action----xml----jsp整个过程都有带值传递
模糊查询返回的是一个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.java public 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.java public 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_*" class="userAction" 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整个过程都有带值传递