模糊查询分页实现

模糊查询的分页

模糊查询返回的是一个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="模糊查询" οnclick="mistyByName(1)" />
            </div>
            <table>
                <thead>
                    <tr>
                        <th>
                            序号
                        </th>
                        <th>
                            用户名
                        </th>
                        <th>
                            密码javascript中的dom模型
                        </th>
                        <th>
                            注册时间
                        </th>
                        <th>
                            操作
                        </th>
                    </tr>
                </thead>
                <tbody id="susers">
                </tbody>
            </table>
            <div id="page">
            </div>
        </div>
    </body>
</html>

 

解析:该页面执行οnclick="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整个过程都有带值传递

转载于:https://my.oschina.net/linuxred/blog/16967

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值