分页收藏待看,实现分页和搜索分页

  • 登录 | 注册
  •  

  •  

先是一个page的bean:
Java代码 
package com.leatherstore.other;  
 
public class Page {  
 
    /** 是否有上一页 */  
    private boolean hasPrePage;  
     
    /** 是否有下一页 */  
    private boolean hasNextPage;  
         
    /** 每页的数量 */  
    private int everyPage;  
     
    /** 总页数 */  
    private int totalPage;  
         
    /** 当前页*/  
    private int currentPage;  
     
    /** 起始点 */  
    private int beginIndex;  
     
    /** 总记录数*/  
    private int totalCount;  
     
    /** 
* @return totalCount 
*/  
public int getTotalCount() {  
return totalCount;  
}  
 
/** 
* @param totalCount 要设置的 totalCount 
*/  
public void setTotalCount(int totalCount) {  
this.totalCount = totalCount;  
}  
 
/** The default constructor */  
    public Page(){  
         
    }  
     
    /** construct the page by everyPage 
     * @param everyPage 
     * */  
    public Page(int everyPage){  
        this.everyPage = everyPage;  
    }  
     
    /** The whole constructor */  
    public Page(boolean hasPrePage, boolean hasNextPage,   
                    int everyPage, int totalPage,  
                    int currentPage, int beginIndex,int totalCount)
{  
        this.hasPrePage = hasPrePage;  
        this.hasNextPage = hasNextPage;  
        this.everyPage = everyPage;  
        this.totalPage = totalPage;  
        this.currentPage = currentPage;  
        this.beginIndex = beginIndex;  
        this.totalCount = totalCount;  
    }  
 
    /** 
     * @return 
     * Returns the beginIndex. 
     */  
    public int getBeginIndex() {  
        return beginIndex;  
    }  
     
    /** 
     * @param beginIndex 
     * The beginIndex to set. 
     */  
    public void setBeginIndex(int beginIndex) {  
        this.beginIndex = beginIndex;  
    }  
     
    /** 
     * @return 
     * Returns the currentPage. 
     */  
    public int getCurrentPage() {  
        return currentPage;  
    }  
     
    /** 
     * @param currentPage 
     * The currentPage to set. 
     */  
    public void setCurrentPage(int currentPage) {  
        this.currentPage = currentPage;  
    }  
     
    /** 
     * @return 
     * Returns the everyPage. 
     */  
    public int getEveryPage() {  
        return everyPage;  
    }  
     
    /** 
     * @param everyPage 
     * The everyPage to set. 
     */  
    public void setEveryPage(int everyPage) {  
        this.everyPage = everyPage;  
    }  
     
    /** 
     * @return 
     * Returns the hasNextPage. 
     */  
    public boolean getHasNextPage() {  
        return hasNextPage;  
    }  
     
    /** 
     * @param hasNextPage 
     * The hasNextPage to set. 
     */  
    public void setHasNextPage(boolean hasNextPage) {  
        this.hasNextPage = hasNextPage;  
    }  
     
    /** 
     * @return 
     * Returns the hasPrePage. 
     */  
    public boolean getHasPrePage() {  
        return hasPrePage;  
    }  
     
    /** 
     * @param hasPrePage 
     * The hasPrePage to set. 
     */  
    public void setHasPrePage(boolean hasPrePage) {  
        this.hasPrePage = hasPrePage;  
    }  
     
    /** 
     * @return Returns the totalPage. 
     * 
     */  
    public int getTotalPage() {  
        return totalPage;  
    }  
     
    /** 
     * @param totalPage 
     * The totalPage to set. 
     */  
    public void setTotalPage(int totalPage) {  
        this.totalPage = totalPage;  
    }  
}  
然后构建一个page的工厂PageUtil:  
package com.leatherstore.other;  
 
public class PageUtil {  
/** 
* Use the origin page to create a new page 

* @param page 
* @param totalRecords 
* @return 
*/  
public static Page createPage(Page page, int totalRecords) {  
return createPage(page.getEveryPage(), page.getCurrentPage(),  
totalRecords);  
}  
 
/** 
* the basic page utils not including exception handler 

* @param everyPage 
* @param currentPage 
* @param totalRecords 
* @return page 
*/  
public static Page createPage(int everyPage, int currentPage,  
int totalRecords) {  
everyPage = getEveryPage(everyPage);  
currentPage = getCurrentPage(currentPage);  
int beginIndex = getBeginIndex(everyPage, currentPage);  
int totalPage = getTotalPage(everyPage, totalRecords);  
boolean hasNextPage = hasNextPage(currentPage, totalPage);  
boolean hasPrePage = hasPrePage(currentPage);  
 
return new Page(hasPrePage, hasNextPage, everyPage, totalPage,  
currentPage, beginIndex, totalRecords);  
}  
 
private static int getEveryPage(int everyPage) {  
return everyPage == 0 ? 10 : everyPage;  
}  
 
private static int getCurrentPage(int currentPage) {  
return currentPage == 0 ? 1 : currentPage;  
}  
 
private static int getBeginIndex(int everyPage, int currentPage) {  
return (currentPage – 1) * everyPage;  
}  
 
private static int getTotalPage(int everyPage, int totalRecords) {  
int totalPage = 0;  
 
if (totalRecords % everyPage == 0)  
totalPage = totalRecords / everyPage;  
else  
totalPage = totalRecords / everyPage + 1;  
 
return totalPage;  
}  
 
private static boolean hasPrePage(int currentPage) {  
return currentPage == 1 ? false : true;  
}  
 
private static boolean hasNextPage(int currentPage, int totalPage) {  
return currentPage == totalPage || totalPage == 0 ? false : true;  
}  
 
}  
然后建一个专用的bean:  
package com.leatherstore.hibernate.domain;  
 
import java.util.List;  
 
import com.leatherstore.other.Page;  
 
public class Result {  
private Page page;  //分页信息  
private List content;  //每页显示的集合  
/** 
     * The default constructor 
     */  
    public Result() {  
        super();  
    }  
 
    /** 
     * The constructor using fields 
     * 
     * @param page 
     * @param content 
     */  
    public Result(Page page, List content) {  
        this.page = page;  
        this.content = content;  
    }  
 
    /** 
     * @return Returns the content. 
     */  
    public List getContent() {  
        return content;  
    }  
 
    /** 
     * @return Returns the page. 
     */  
    public Page getPage() {  
        return page;  
    }  
 
    /** 
     * @param content 
     *            The content to set. 
     */  
    public void setContent(List content) {  
        this.content = content;  
    }  
 
    /** 
     * @param page 
     *            The page to set. 
     */  
    public void setPage(Page page) {  
        this.page = page;  
    }  
}  
 
然后在数据访问层写两个方法:  
ProductDAO:  
public List getProductByPage(Page page);   
public int getProductCount();  //返回数据的总数  
ProductDAO的接口实现ProductDAOImpl:  
//为了在spring里统一编程风格:我用的回调的方法  
public List getProductByPage(final Page page) {  
return this.getHibernateTemplate().executeFind(new
HibernateCallback(){  
public Object doInHibernate(Session session) throws HibernateException,
SQLException {  
Query query=session.createQuery(“from Productinfo”);  
query.setFirstResult(page.getBeginIndex()); //hibernate分页的精髓  
呵呵  
    query.setMaxResults(page.getEveryPage());  
    return query.list();  
}  
});  
}  
 
public int getProductCount() {  
List list=this.getHibernateTemplate().find(“select count(*) from
Productinfo”);  
return ((Integer)list.iterator().next()).intValue();  
}  
然后是业务层:  
IProduct:  
public Result listProduct(Page page);  
然后IProduct接口的实现:IProductImpl:  
private ProductDAO productDAO;  
public void setProductDAO(ProductDAO productDAO){  
this.productDAO=productDAO;  
}  
 
public Result listProduct(Page page) {  
int totalRecords = this.productDAO.getProductCount();  
page = PageUtil.createPage(page, totalRecords);  
        List products = this.productDAO.getProductByPage(page);       
        return new Result(page, products);  
}  
然后再代理层:  
ProductProxy:  
IProduct
pro=(IProduct)AppContext.getInstance().getappcontext().getBean(“productServicewithTran”);  
 
public Result productlist(Page page){  
try{  
return pro.listProduct(page);  
}catch(DataAccessException ex){  
ex.printStackTrace();  
return null;  
}  
}  
呵呵 终于到productAction啦  
显示前方法的代码  
Page page = new Page();   //实例化一个page对象  
page.setEveryPage(10);    //设置每页显示的条数  
page.setCurrentPage(1);    //为第一页  
Result result = pdp.productlist(page);  
request.setAttribute(“page”, pageinfo);  
request.setAttribute(“productlist”, list);  
return mapping.findForward(“showProduct”);  
接着就是jsp页面了  
<logic:iterate id=”product” name=”productlist”>  
//中间迭代所要显示的数据  
</logic:iterate>  
<tr>  
    <td width=”80″ height=”30″> </td>  
    <logic:equal value=”true” name=”page”
property=”hasPrePage”>  
    <td width=”150″ height=”30″><div align=”right”><a
href=”../product.do?method=showProductByTag&index=first& msg=${msg
}”>首页</a></div></td>  
    <td width=”80″ height=”30″><div align=”center”><a
href=”../product.do?method=showProductByTag&index=prew&pageno=${page.currentPage
-1}&msg=${msg }”>上一页</a></div></td>  
    </logic:equal>  
    <logic:notEqual value=”true” name=”page”
property=”hasPrePage”>  
    <td width=”150″ height=”30″><div
align=”right”>首页</div></td>  
    <td width=”80″ height=”30″><div
align=”center”>上一页</div></td>  
    </logic:notEqual>  
    <logic:equal value=”true” name=”page”
property=”hasNextPage”>  
    <td width=”80″ height=”30″><div align=”center”><a
href=”../product.do?method=showProductByTag&index=next&pageno=${page.currentPage
+1 }&msg=${msg }”>下一页</a></div></td>  
    <td width=”80″ height=”30″><div align=”center”><a
href=”../product.do?method=showProductByTag&index=end&pageno=${page.totalPage
}&msg=${msg }”>尾页</a></div></td>  
    </logic:equal>  
    <logic:notEqual value=”true” name=”page”
property=”hasNextPage”>  
    <td width=”80″ height=”30″><div
align=”center”>下一页</div></td>  
    <td width=”80″ height=”30″><div
align=”center”>尾页</div></td>  
    </logic:notEqual>  
    <td height=”30″ colspan=”3″><div
align=”center”>页次${page.currentPage }/${page.totalPage
}   共${page.totalCount }条记录</div>      <div
align=”center”></div></td>  
  </tr>  
可以显示相应的页面信息  
然后productAction里面的showProductByTag代码如下:  
Page page = new Page();  
page.setEveryPage(10);  
String pagemark = request.getParameter(“goto”);  
if (pagemark == null) {  
String state = request.getParameter(“index”);  
String pageno = request.getParameter(“pageno”);  
System.out.println(“pageno=” + pageno);  
if (“first”.equals(state)) {  
page.setCurrentPage(1);  
Result result = pdp.productlist(page);  
request.setAttribute(“page”, result.getPage());  
request.setAttribute(“productlist”, result.getContent());  
} else if (“prew”.equals(state)) {  
page.setCurrentPage(Integer.parseInt(pageno));  
Result result = pdp.productlist(page);  
request.setAttribute(“page”, result.getPage());  
request.setAttribute(“productlist”, result.getContent());  
} else if (“next”.equals(state)) {  
page.setCurrentPage(Integer.parseInt(pageno));  
Result result = pdp.productlist(page);  
request.setAttribute(“page”, result.getPage());  
request.setAttribute(“productlist”, result.getContent());  
} else if (“end”.equals(state)) {  
page.setCurrentPage(Integer.parseInt(pageno));  
Result result = pdp.productlist(page);  
request.setAttribute(“page”, result.getPage());  
request.setAttribute(“productlist”, result.getContent());  
}  
} else {  
page.setCurrentPage(Integer.parseInt(pagemark));  
Result result = pdp.productlist(page);  
request.setAttribute(“page”, result.getPage());  
request.setAttribute(“productlist”, result.getContent());  
}  
return mapping.findForward(“showProduct”);  

在路上


在路上,要懂得积累;在路上,要学会放下;我在路上!Stay hungry,Stay foolish。

 

 

 

  • 永利皇宫网址 1目录视图
  • 永利皇宫网址 2摘要视图
  • 永利皇宫网址 3订阅

【公告】博客系统优化升级
    【收藏】Html5 精品资源汇集     博乐招募开始啦    

 

SSH的分页网上有不少的例子,有利用session的,有利用分页组件的。我几个师兄原来搞的SSH项目也有一个成熟的分页插件。

SSM框架——实现分页和搜索分页

标签:
springMVC分页搜索分页mybatisssm

2014-05-21 11:09 5517人阅读
评论(9)
收藏
举报

永利皇宫网址 4 分类:

J2EE(9) 永利皇宫网址 5

版权声明:本文为博主原创文章,欢迎转载,请注明地址。

目录(?)[+]

        分页是JAVA
WEB项目常用的功能,昨天在Spring
MVC中实现了简单的分页操作和搜索分页,在此记录一下。使用的框架为(MyBatis+SpringMVC+Spring)。

       
首先我们需要一个分页的工具类:

具体业务实现类中的分页方法:
Java代码 
public List get*****(int pageNO){  
            DetachedCriteria dc =
DetachedCriteria.forClass(****.class);             
            List list=*****Dao.getList(dc,pageNO,15);  
            int a = 0;  
            if (list.equals(null)){a=1;}  
            return list;  
        }  
public PageBean getBean(int pageNO)  
        {  
            ***** jg;  
             DetachedCriteria dc =
DetachedCriteria.forClass(*****.class);  
            PageBean pb=collegeDao.getPageBean(dc,pageNO,15);         
            return pb;  
        }  
 
 
然后是一个PageBean的工具类,负责创建分页属性和基本逻辑。  
 
然后是页面的bean获取输出信息及分页属性。  
 
我觉得单纯的拷贝,自己用的不是很顺手。于是自己也搞了一个,个人认为可以清晰的分层,实现这个分页。分层还是传统的SSH七层结构。  
 
SSH结构思想参考我的另一篇随笔SSH思想之我见!  
 
下面是分页思想,一个初始化方法和一个分页实现方法:  
 
分页的util类:  
 
package com.sy.util;  
 
import java.util.List;  
@SuppressWarnings(“unchecked”)  
public class Page {  
 
    private int pageSize;  
    private int totalPage;  
    private int rowCount;  
    private int currentPage;  
    private int prePage;  
    private int nextPage;  
    private boolean hasNextPage;  
    private boolean hasPreviousPage;  
    private List list;  
 
    public Page() {  
        this.pageSize=10;  
    }  
 
    public int getPageSize() {  
        return pageSize;  
    }  
 
    public void setPageSize(int pageSize) {  
        this.pageSize = pageSize;  
    }  
 
    public int getTotalPage() {  
        return totalPage;  
    }  
 
    public void setTotalPage(int totalPage) {  
        this.totalPage = totalPage;  
    }  
 
    public int getRowCount() {  
        return rowCount;  
    }  
 
    public void setRowCount(int rowCount) {  
        this.rowCount = rowCount;  
    }  
 
    public int getCurrentPage() {  
        return currentPage;  
    }  
 
    public void setCurrentPage(int currentPage) {  
        this.currentPage = currentPage;  
    }  
 
    public int getPrePage() {  
        return prePage;  
    }  
 
    public void setPrePage(int prePage) {  
        this.prePage = prePage;  
    }  
 
    public int getNextPage() {  
        return nextPage;  
    }  
 
    public void setNextPage(int nextPage) {  
        this.nextPage = nextPage;  
    }  
 
    public boolean isHasNextPage() {  
        return hasNextPage;  
    }  
 
    public void setHasNextPage(boolean hasNextPage) {  
        this.hasNextPage = hasNextPage;  
    }  
 
    public boolean isHasPreviousPage() {  
        return hasPreviousPage;  
    }  
 
    public void setHasPreviousPage(boolean hasPreviousPage) {  
        this.hasPreviousPage = hasPreviousPage;  
    }  
 
    public List getList() {  
        return list;  
    }  
 
    public void setList(List list) {  
        this.list = list;  
    }  
     
 
}  
 
 
 
分页的数据库操作和逻辑判断我把他单独用一个PageDaoImpl来实现:  
 
/* 
* 施杨的分页daoimpl类 
* */  
package com.sy.dao.impl;  
 
import java.sql.SQLException;  
import java.util.List;  
 
import org.hibernate.HibernateException;  
import org.hibernate.Query;  
import org.hibernate.Session;  
import org.springframework.orm.hibernate3.HibernateCallback;  
import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
 
import com.sy.dao.BaseDao;  
import com.sy.util.Page;  
 
@SuppressWarnings(“unchecked”)  
public class PageDaoImpl extends HibernateDaoSupport {  
 
    private String hql;  
    public Page page;  
    public int start;  
    public BaseDao dao;  
    public void setDao(BaseDao dao) {  
        this.dao = dao;  
    }  
 
    public void init(int start,String tableName){    //
ͨ��init����ʵ����ij�ʼ��  
       page = new Page();  
       this.hql = “from “+tableName;  
       this.start = start;  
       setRowCount();  
       setTotalPage();  
       setCurrentPage();  
       setPrePage();  
       setNextPage();  
       setPreOrNextBoolean();  
    }  
 
    public int getRowCount(){  
       List list = dao.find(hql);  
       if(list.isEmpty()){  
        return 0;  
       }  
       return list.size();  
    }  
 
    public Page getPage(){  
       List list = (List)getHibernateTemplate().execute(new
HibernateCallback(){  
        public Object doInHibernate(Session session) throws
HibernateException, SQLException {  
         Query query = session.createQuery(hql);  
         query.setFirstResult(getStartIndex());  
         query.setMaxResults(page.getPageSize());  
         return query.list();  
        }    
       });  
       page.setList(list);  
       return page;  
    }  
     
    public void setPreOrNextBoolean() {  
        if (page.getCurrentPage() <= 1) {  
            page.setHasPreviousPage(false);  
        } else {  
            page.setHasPreviousPage(true);  
        }  
        if (page.getCurrentPage() >= page.getTotalPage()) {  
            page.setHasNextPage(false);  
        } else {  
            page.setHasNextPage(true);  
        }  
    }  
 
    public void setCurrentPage() {  
        if (start < 1) {  
            page.setCurrentPage(1);  
        }  
        if (start > page.getTotalPage()) {  
            page.setCurrentPage(page.getTotalPage());  
        }  
        page.setCurrentPage(start);  
    }  
 
    public void setPrePage() {  
        page.setPrePage(page.getCurrentPage() – 1);  
    }  
 
    public void setNextPage() {  
        page.setNextPage(page.getCurrentPage() + 1);  
    }  
 
    public void setTotalPage() {  
        int rowCount = getRowCount();  
        int pageSize = page.getPageSize();  
        if (rowCount > pageSize) {  
            if (rowCount % pageSize == 0) {  
                page.setTotalPage(rowCount / pageSize);  
            } else {  
                page.setTotalPage(1 + (rowCount / pageSize));  
            }  
        } else {  
            page.setTotalPage(1);  
        }  
    }  
 
    public void setRowCount() {  
        page.setRowCount(getRowCount());  
    }  
 
    public int getStartIndex() {  
        int startIndex = 0;  
        if (start < 0) {  
            startIndex = 0;  
        } else {  
            if (start > page.getTotalPage()) {  
                startIndex = page.getPageSize() * (page.getTotalPage()

1.分页

 

[java] view
plain
copy
print?永利皇宫网址 6永利皇宫网址 7

  1. import java.io.Serializable;  
  2.   
  3. /** 
  4.  * 分页 
  5.  */  
  6. public class Page implements Serializable {  
  7.   
  8.     private static final long serialVersionUID = -3198048449643774660L;  
  9.   
  10.     private int pageNow = 1; // 当前页数  
  11.   
  12.     private int pageSize = 4; // 每页显示记录的条数  
  13.   
  14.     private int totalCount; // 总的记录条数  
  15.   
  16.     private int totalPageCount; // 总的页数  
  17.   
  18.     @SuppressWarnings(“unused”)  
  19.     private int startPos; // 开始位置,从0开始  
  20.   
  21.     @SuppressWarnings(“unused”)  
  22.     private boolean hasFirst;// 是否有首页  
  23.   
  24.     @SuppressWarnings(“unused”)  
  25.     private boolean hasPre;// 是否有前一页  
  26.   
  27.     @SuppressWarnings(“unused”)  
  28.     private boolean hasNext;// 是否有下一页  
  29.   
  30.     @SuppressWarnings(“unused”)  
  31.     private boolean hasLast;// 是否有最后一页  
  32.       
  33.     /** 
  34.      * 通过构造函数 传入  总记录数  和  当前页 
  35.      * @param totalCount 
  36.      * @param pageNow 
  37.      */  
  38.     public Page(int totalCount, int pageNow) {  
  39.         this.totalCount = totalCount;  
  40.         this.pageNow = pageNow;  
  41.     }  
  42.       
  43.     /** 
  44.      * 取得总页数,总页数=总记录数/总页数 
  45.      * @return 
  46.      */  
  47.     public int getTotalPageCount() {  
  48.         totalPageCount = getTotalCount() / getPageSize();  
  49.         return (totalCount % pageSize == 0) ? totalPageCount  
  50.                 : totalPageCount + 1;  
  51.     }  
  52.   
  53.     public void setTotalPageCount(int totalPageCount) {  
  54.         this.totalPageCount = totalPageCount;  
  55.     }  
  56.   
  57.     public int getPageNow() {  
  58.         return pageNow;  
  59.     }  
  60.   
  61.     public void setPageNow(int pageNow) {  
  62.         this.pageNow = pageNow;  
  63.     }  
  64.   
  65.     public int getPageSize() {  
  66.         return pageSize;  
  67.     }  
  68.   
  69.     public void setPageSize(int pageSize) {  
  70.         this.pageSize = pageSize;  
  71.     }  
  72.   
  73.     public int getTotalCount() {  
  74.         return totalCount;  
  75.     }  
  76.   
  77.     public void setTotalCount(int totalCount) {  
  78.         this.totalCount = totalCount;  
  79.     }  
  80.     /** 
  81.      * 取得选择记录的初始位置 
  82.      * @return 
  83.      */  
  84.     public int getStartPos() {  
  85.         return (pageNow – 1) * pageSize;  
  86.     }  
  87.   
  88.     public void setStartPos(int startPos) {  
  89.         this.startPos = startPos;  
  90.     }  
  91.   
  92.     /** 
  93.      * 是否是第一页 
  94.      * @return 
  95.      */  
  96.     public boolean isHasFirst() {  
  97.         return (pageNow == 1) ? false : true;  
  98.     }  
  99.   
  100.     public void setHasFirst(boolean hasFirst) {  
  101.         this.hasFirst = hasFirst;  
  102.     }  
  103.     /** 
  104.      * 是否有首页 
  105.      * @return 
  106.      */  
  107.     public boolean isHasPre() {  
  108.         // 如果有首页就有前一页,因为有首页就不是第一页  
  109.         return isHasFirst() ? true : false;  
  110.     }  
  111.   
  112.     public void setHasPre(boolean hasPre) {  
  113.         this.hasPre = hasPre;  
  114.     }  
  115.     /** 
  116.      * 是否有下一页 
  117.      * @return 
  118.      */  
  119.     public boolean isHasNext() {  
  120.         // 如果有尾页就有下一页,因为有尾页表明不是最后一页  
  121.         return isHasLast() ? true : false;  
  122.     }  
  123.   
  124.     public void setHasNext(boolean hasNext) {  
  125.         this.hasNext = hasNext;  
  126.     }  
  127.     /** 
  128.      * 是否有尾页 
  129.      * @return 
  130.      */  
  131.     public boolean isHasLast() {  
  132.         // 如果不是最后一页就有尾页  
  133.         return (pageNow == getTotalCount()) ? false : true;  
  134.     }  
  135.   
  136.     public void setHasLast(boolean hasLast) {  
  137.         this.hasLast = hasLast;  
  138.     }  
  139.   
  140. }  

     
 有了这个工具类后,首先编写MyBatis的XxxxMapper.xml配置文件中的SQL语句,如下:

[html] view
plain
copy
print?永利皇宫网址 8永利皇宫网址 9

  1. <!– 分页SQL语句 –>  
  2. <select id=”selectProductsByPage” resultMap=”返回值类型”>  
  3.   select   
  4.   *  
  5.   from 表名 WHERE user_id = #{userId,jdbcType=INTEGER} limit #{startPos},#{pageSize}   
  6. </select>  
  7. <!– 取得记录的总数 –>  
  8. <select id=”getProductsCount” resultType=”long”>  
  9.   SELECT COUNT(*) FROM 表名 WHERE user_id = #{userId,jdbcType=INTEGER}   
  10. </select>  

             此处我们可以看到,2个<select>需要分别传入3个和1个参数,此时在对应的DAO文件IXxxxDao中编写接口来编写对应的方法,方法名和mapper.xml中的id属性值一致:

[java] view
plain
copy
print?永利皇宫网址 10永利皇宫网址 11

  1. /** 
  2.  * 使用注解方式传入多个参数,用户产品分页,通过登录用户ID查询 
  3.  * @param page 
  4.  * @param userId 
  5.  * @return startPos},#{pageSize}  
  6.  */  
  7. public List<Products> selectProductsByPage(@Param(value=”startPos”) Integer startPos,@Param(value=”pageSize”) Integer pageSize,@Param(value=”userId”) Integer userId);  
  8.   
  9. /** 
  10.  * 取得产品数量信息,通过登录用户ID查询 
  11.  * @param userId 
  12.  * @return 
  13.  */  
  14. public long getProductsCount(@Param(value=”userId”) Integer userId);  

 

接口定义完成之后需要编写相应的业务接口和实现方法,在接口中定义这样一个方法,然后实现类中覆写一下:

 

[java] view
plain
copy
print?永利皇宫网址 12永利皇宫网址 13

  1. /** 
  2.      * 分页显示商品 
  3.      * @param request 
  4.      * @param model 
  5.      * @param loginUserId 
  6.      */  
  7.     void showProductsByPage(HttpServletRequest request,Model model,int loginUserId);  

       
接下来实现类中的方法就是要调用DAO层和接受Controller传入的参数,进行业务逻辑的处理,request用来获取前端传入的参数,model用来向JSP页面返回处理结果。

[java] view
plain
copy
print?永利皇宫网址 14永利皇宫网址 15

  1. @Override  
  2. public void showProductsByPage(HttpServletRequest request, Model model,int loginUserId) {  
  3.     String pageNow = request.getParameter(“pageNow”);  
  4.   
  5.     Page page = null;  
  6.   
  7.     List<ProductWithBLOBs> products = new ArrayList<ProductWithBLOBs>();  
  8.   
  9.     int totalCount = (int) productDao.getProductsCount(loginUserId);  
  10.   
  11.     if (pageNow != null) {  
  12.         page = new Page(totalCount, Integer.parseInt(pageNow));  
  13.         allProducts = this.productDao.selectProductsByPage(page.getStartPos(), page.getPageSize(), loginUserId);  
  14.     } else {  
  15.         page = new Page(totalCount, 1);  
  16.         allProducts = this.productDao.selectProductsByPage(page.getStartPos(), page.getPageSize(), loginUserId);  
  17.     }  
  18.   
  19.     model.addAttribute(“products”, products);  
  20.     model.addAttribute(“page”, page);  
  21. }  

       接下来是控制器的编写,当用户需要跳转到这个现实产品的页面时,就需要经过这个控制器中相应方法的处理,这个处理过程就是调用业务层的方法来完成,然后返回结果到JSP动态显示,服务器端生成好页面后传给客户端(浏览器)现实,这就是一个MVC过程。

[java] view
plain
copy
print?永利皇宫网址 16永利皇宫网址 17

  1. /** 
  2.  * 初始化 “我的产品”列表 JSP页面,具有分页功能 
  3.  *  
  4.  * @param request 
  5.  * @param model 
  6.  * @return 
  7.  */  
  8. @RequestMapping(value = “映射路径”, method = RequestMethod.GET)  
  9. public String showMyProduct(HttpServletRequest request, Model model) {  
  10.     // 取得SESSION中的loginUser  
  11.     User loginUser = (User) request.getSession().getAttribute(“loginUser”);  
  12.     // 判断SESSION是否失效  
  13.     if (loginUser == null || “”.equals(loginUser)) {  
  14.         return “redirect:/”;  
  15.     }  
  16.   
  17.     int loginUserId = loginUser.getUserId();  
  18.     //此处的productService是注入的IProductService接口的对象  
  19.     this.productService.showProductsByPage(request, model, loginUserId);  
  20.   
  21.     return “跳转到的JSP路径”;  
  22. }  

           
    JSP页面接受部分我就不写了,每个人都一样,也就是结合JSTL和EL来写,(在循环输出的时候也做了判断,如果接受的参数为空,那么输出暂无商品,只有接受的参数不为空的时候,才循环输出,使用<<c:when
    test=”${}”>结合<c:otherwise>),这里只给出分页的相关代码:

 

[html] view
plain
copy
print?永利皇宫网址 18永利皇宫网址 19

  1. <!– 分页功能 start –>  
  2.     <div align=”center”>  
  3.         <font size=”2″>共 ${page.totalPageCount} 页</font> <font size=”2″>第  
  4.             ${page.pageNow} 页</font> <a href=”myProductPage?pageNow=1″>首页</a>  
  5.         <c:choose>  
  6.             <c:when test=”${page.pageNow – 1 > 0}”>  
  7.                 <a href=”myProductPage?pageNow=${page.pageNow – 1}”>上一页</a>  
  8.             </c:when>  
  9.             <c:when test=”${page.pageNow – 1 <= 0}”>  
  10.                 <a href=”myProductPage?pageNow=1″>上一页</a>  
  11.             </c:when>  
  12.         </c:choose>  
  13.         <c:choose>  
  14.             <c:when test=”${page.totalPageCount==0}”>  
  15.                 <a href=”myProductPage?pageNow=${page.pageNow}”>下一页</a>  
  16.             </c:when>  
  17.             <c:when test=”${page.pageNow + 1 < page.totalPageCount}”>  
  18.                 <a href=”myProductPage?pageNow=${page.pageNow + 1}”>下一页</a>  
  19.             </c:when>  
  20.             <c:when test=”${page.pageNow + 1 >= page.totalPageCount}”>  
  21.                 <a href=”myProductPage?pageNow=${page.totalPageCount}”>下一页</a>  
  22.             </c:when>  
  23.         </c:choose>  
  24.         <c:choose>  
  25.             <c:when test=”${page.totalPageCount==0}”>  
  26.                 <a href=”myProductPage?pageNow=${page.pageNow}”>尾页</a>  
  27.             </c:when>  
  28.             <c:otherwise>  
  29.                 <a href=”myProductPage?pageNow=${page.totalPageCount}”>尾页</a>  
  30.             </c:otherwise>  
  31.         </c:choose>  
  32.     </div>  
  33.     <!– 分页功能 End –>  
  • 1);  
                } else {  
                    startIndex = page.getPageSize() * (start – 1);  
                }  
            }  
            return startIndex;  
        }  
    }  
     
     
     
    然后是业务层接口,举例AdminService.java  
     
     
     
    //管理员service层接口  
    package com.sy.service;  
     
    import java.util.List;  
     
    import com.sy.util.Page;  
    import com.sy.vo.Admin;  
     
    public interface AdminService extends BaseService{  
     
         
         
    //分页初始化  
        public void init(int pno);  
    //分页实现  
        public Page getPage();  
         
    }  
     
     
     
    实现类AdminServiceImpl.java  
     
     
     
    //管理员service层实现类  
    package com.sy.service.impl;  
     
    import java.util.List;  
     
    import com.sy.dao.impl.AdminDaoImpl;  
    import com.sy.dao.impl.PageDaoImpl;  
    import com.sy.service.AdminService;  
    import com.sy.util.Page;  
    import com.sy.vo.Admin;  
     
    @SuppressWarnings(“unchecked”)  
    public class AdminServiceImpl extends BaseServiceImpl implements
    AdminService {  
     
            .  
     
        public Page getPage() {  
            return Pdao.getPage();  
        }  
        public void init(int pno) {  
            String tableName=”Admin”;  
            Pdao.init(pno,tableName);  
        }  
    }  
     
     
    struts的action层AdminAction.java  
     
     
     
    //管理员action实现类  
    package com.sy.action;  
     
    import java.util.List;  
     
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletResponse;  
    import javax.servlet.http.HttpSession;  
     
    import org.apache.struts.action.ActionForm;  
    import org.apache.struts.action.ActionForward;  
    import org.apache.struts.action.ActionMapping;  
    import org.apache.struts.action.ActionMessage;  
    import org.apache.struts.action.ActionMessages;  
     
    import com.sy.form.AdminForm;  
    import com.sy.form.LoginForm;  
    import com.sy.service.AdminService;  
    import com.sy.util.MD5;  
    import com.sy.util.Page;  
    import com.sy.vo.Admin;  
    @SuppressWarnings(“unchecked”)  
    public class AdminAction extends BaseAction {  
     
            .  
    //查看管理员  
        public ActionForward listAdmins(ActionMapping mapping, ActionForm
    form,  
                HttpServletRequest request, HttpServletResponse response)
    {  
            AdminService as=(AdminService)super.getBean(“AdminService”);  
               int pno = (new
    Integer(request.getParameter(“pno”))).intValue();  
               as.init(pno);  
               Page myPage = as.getPage();  
               List myList = as.getPage().getList();  
               request.setAttribute(“myPage”, myPage);  
               request.setAttribute(“AdminList”, myList);  
               return mapping.findForward(“show”);  
                
        }  
    }  
     
     
    结构清晰,也很实用。  
     
    页面lookAdmin.jsp  
    永利皇宫网址, 
     
     
    <%@ page language=”java” pageEncoding=”UTF-8″%>  
    <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01
    Transitional//EN”>  
    <%@ taglib uri=””
    prefix=”c”%>  
    <%@ taglib uri=”” prefix=”bean”
    %>  
    <%@ taglib uri=”” prefix=”html”
    %>  
    <%@ taglib uri=”” prefix=”logic”
    %>  
    <%@ taglib uri=”” prefix=”tiles”
    %>  
    <html>  
        <head>  
            <meta http-equiv=”Content-Language” content=”zh-cn”>  
            <meta http-equiv=”Content-Type” content=”text/html;
    charset=utf-8″>  
            <title>施杨SSH新闻发布</title>  
        </head>  
        <body>  
            <center>  
                <h3>  
                    查看管理员  
                </h3>  
                <br>  
                <a
    href=”./admin/addAdmin.jsp”>添加管理员</a>  
                <br>  
                <a href=”./NewsPage2.do?pno=1″>查看新闻</a>  
                <br>  
                <table border=”2″ width=”600″>  
                    <tr>  
                        <td>  
                            用户名  
                        </td>  
                        <td>  
                            密码  
                        </td>  
                        <td>  
                            操作  
                        </td>  
                    </tr>  
        <c:forEach items=”${requestScope[‘AdminList’]}”
    var=”admin”>  
                <tr align=”center”>  
                  <td width=”20%” height=”10″><c:out
    value=”${admin.aname}” /></td>  
                  <td width=”20%” height=”10″><c:out
    value=”${admin.apassword}” /></td>  
                  <td>  
                    <a href=”./editAdmin.do?aid=<c:out
    value=”${admin.aid}”/>”>修改</a>  
                        
                    <a href=”./deleteAdmin.do?aid=<c:out
    value=”${admin.aid}”/>” onclick=”javascript:return
    confirm(‘您确定删除吗?’)”>删除</a>  
                  </td>  
                </tr>  
        </c:forEach>  
        </table>  
        <table align=”center” width=”500″>  
        <tr>  
           <td align=”center” colspan=”10″>  
              <logic:present name=”myPage”>  
                <html:link
    page=”/AdminPage.do?pno=1″>首页</html:link>  
              <logic:equal name=”myPage” property=”hasPreviousPage”
    value=”false”>上一页</logic:equal>  
              <logic:equal name=”myPage” property=”hasPreviousPage”
    value=”true”>  
               <a href=”./AdminPage.do?pno=<bean:write%20name=”myPage”
    property=”prePage”/>”>上一页</a>  
          </logic:equal>  
                
               每页<bean:write name=”myPage”
    property=”pageSize”/>条记录  
               共<bean:write name=”myPage”
    property=”rowCount”/>条记录  
                    当前第(<bean:write name=”myPage”
    property=”currentPage”/>/<bean:write name=”myPage”
    property=”totalPage”/>)页  
            <logic:equal name=”myPage” property=”hasNextPage”
    value=”false”>下一页</logic:equal>  
            <logic:equal name=”myPage” property=”hasNextPage”
    value=”true”>  
             <a href=”./AdminPage.do?pno=<bean:write%20name=”myPage”
    property=”nextPage”/>”>下一页</a>  
            </logic:equal>  
               <a href=”./AdminPage.do?pno=<bean:write%20name=’myPage’
    property=’totalPage’/>”>末页</a>  
            </logic:present>  
          </td>  
          </tr>  
        </table>  
            </center>  
        </body>  
    </html>  

2.查询分页

       关于查询分页,大致过程完全一样,只是第三个参数(上面是loginUserId)需要接受用户输入的参数,这样的话我们需要在控制器中接受用户输入的这个参数(页面中的<input>使用GET方式传参)
然后将其加入到SESSION中,即可完成查询分页(此处由于“下一页”这中超链接的原因,使用了不同的JSP页面处理分页和搜索分页,暂时没找到在一个
JSP页面中完成的方法,出现了重复代码,这里的重复代码就是输出内容的那段代码,可以单独拿出去,然后用一个<include>标签加载到
需要的JSP页面就可以了,这样可以避免代码重复):

     
这里给出控制器的代码作为参考:

 

[java] view
plain
copy
print?永利皇宫网址 20永利皇宫网址 21

  1. /** 
  2.      * 通过 产品名称 查询产品 
  3.      * @param request 
  4.      * @param model 
  5.      * @return 
  6.      */  
  7.     @RequestMapping(value = “映射地址”, method = RequestMethod.GET)  
  8.     public String searchForProducts(HttpServletRequest request, Model model) {  
  9.         HttpSession session = request.getSession();  
  10.   
  11.         String param = request.getParameter(“param”);  
  12.   
  13.         String condition = (String) session.getAttribute(“condition”);  
  14.   
  15.         //先判断SESSION中的condition是否为空  
  16.         if (condition == null) {  
  17.             condition = new String();  
  18.             session.setAttribute(“condition”, condition);  
  19.             //如果Session中的condition为空,再判断传入的参数是否为空,如果为空就跳转到搜索结果页面  
  20.             if (param == null || “”.equals(param)) {  
  21.                 return “private/space/ProductSearchResult”;  
  22.             }  
  23.         }  
  24.         //如果SESSION不为空,且传入的搜索条件param不为空,那么将param赋值给condition  
  25.         if (param != null && !(“”.equals(param))) {  
  26.             condition = param;  
  27.             session.setAttribute(“condition”, condition);  
  28.         }  
  29.         //使用session中的condition属性值来作为查询条件  
  30.         this.productService.showSearchedProductsByPage(request, model, condition);  
  31.   
  32.         return “跳转的页面”;  
  33.     }  

永利皇宫网址 22

 


11


0

 

 

  • 上一篇JS暂停函数(类似java中的sleep)
  • 下一篇EL表达式中的数字类型

我的同类文章

J2EE(9)

  • SSM框架——以注解形式实现事务管理2014-07-25阅读**4766**
  • 使用maven创建web项目2014-07-18阅读**66879**
  • SSM框架——SpringMVC中使用@ResponseBody注解返回值,Ajax取得中文乱码解决方法2014-07-10阅读**3504**
  • SSM框架——使用MyBatis
    Generator自动创建代码2014-04-17阅读**53820**
  • HTTP协议详解2014-02-05阅读**834**

  • SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)2014-07-19阅读**82898**
  • 网站过滤器Filter2014-07-12阅读**1338**
  • EL表达式中的数字类型2014-06-04阅读**1024**
  • JSP中的pagaEncoding和contentType中charset的区别2014-03-16阅读**1553**

 

猜你在找

JavaWeb程序设计JavaWeb基础核心技术营销型网站建设经典JDBC+MyBatis学习视频微信平台二次开发入门

DWZ框架分页和搜索功能1MVC框架复习
2Ajax加强 3搜索建议 4三级联动 5刷新分页
6Ajax局部动态更新数据CI框架搜索分页ThinkPHP
31
框架–分页搜索的应用利用VUE框架实现列表分页功能

 

查看评论

9楼 alining_1 3天前 11:29发表 [回复]
永利皇宫网址 23

求源码 ,1501911035@qq.com,谢谢

8楼 Alan_DM 3天前 10:18发表 [回复]
永利皇宫网址 24

89680252@qq.com

7楼 Alan_DM 3天前 10:18发表 [回复]
永利皇宫网址 24

能不能给个源码
谢谢了

6楼 qq_28227689 4天前 11:04发表 [回复]
永利皇宫网址 26

大神求源代码,邮箱1905646586@qq.com,跪求啊,谢谢了

5楼 qq_32072065 2016-06-17 16:18发表 [回复]
永利皇宫网址 27

利害 1093619789@qq.com

4楼 qq_32072065 2016-06-17 14:40发表 [回复]
永利皇宫网址 27

搜索分页

3楼 隨性 2016-05-08 10:46发表 [回复]
永利皇宫网址 29

求源码 ,332836479@qq.com,谢谢

2楼 qq_16639791 2016-04-05 08:26发表 [回复]
永利皇宫网址 30

1535231035@qq.com,谢谢

1楼 qq_16603207 2015-12-15 16:14发表 [回复]
永利皇宫网址 31

求源码,发到我的邮箱81734911@qq.com 谢谢了

您还没有登录,请[登录]或[注册]

* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

 

 

 

核心技术类目

全部主题 Hadoop
AWS 移动游戏
Java Android
iOS Swift
智能硬件
Docker
OpenStack
VPN Spark
ERP IE10
Eclipse
CRM
JavaScript
数据库
Ubuntu
NFC WAP
jQuery
BI HTML5
Spring
Apache
.NET API
HTML SDK
IIS
Fedora
XML LBS
Unity
Splashtop
UML
components Windows
Mobile
Rails
QEMU KDE
Cassandra
CloudStack
FTC
coremail
OPhone
CouchBase
云计算
iOS6
Rackspace Web
App
SpringSide
Maemo
Compuware
大数据
aptech
Perl
Tornado
Ruby
Hibernate
ThinkPHP
HBase
Pure
Solr
Angular Cloud
Foundry
Redis
Scala
Django
Bootstrap

 

永利皇宫网址 32
shu_lin

 

永利皇宫网址 33
永利皇宫网址 34

  • 访问:412521次
  • 积分:2673
  • 等级:
    永利皇宫网址 35
  • 排名:第9366名

  • 原创:58篇
  • 转载:14篇
  • 译文:0篇
  • 评论:386条
JVM总结

文章:6篇

阅读:2609

设计模式(JAVA)

文章:8篇

阅读:12016

  • JAVA(14)
  • J2EE(10)
  • JS(4)
  • 设计模式(10)
  • Algorithm(2)
  • Android(8)
  • 开发环境搭建(5)
  • 杂谈(14)
  • 架构设计(1)
  • Hadoop(3)
  • Linux(1)

  • SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)(82977)
  • MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建(82756)
  • 使用maven创建web项目(66939)
  • SSM框架——使用MyBatis
    Generator自动创建代码(53866)
  • Log4j配置详解(14468)
  • MyEclipse安装JS代码提示(Spket插件)(12052)
  • SSM框架——实现分页和搜索分页(5512)
  • Android学习——百度地图开发定位与显示Demo(5343)
  • SSM框架——以注解形式实现事务管理(4767)
  • 设计模式——装饰模式(Decorator)(4206)

  • 2016年03月(1)

  • 2016年02月(2)
  • 2016年01月(5)
  • 2015年12月(4)
  • 2015年09月(2)

展开

  • SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)(213)
  • SSM框架——使用MyBatis
    Generator自动创建代码(67)
  • 使用maven创建web项目(28)
  • MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建(20)
  • MyEclipse安装JS代码提示(Spket插件)(11)
  • SSM框架——实现分页和搜索分页(9)
  • SSM框架——以注解形式实现事务管理(7)
  • Android学习——百度地图开发定位与显示Demo(6)
  • 2016年计划,2015年总结(5)
  • 年初,计划!(3)

  • SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    Sysecho:
    学长就是学长,大神就是大神,哈哈。你的代码暴露了你的学校~

  • SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    deng20160807:
    怎么没有转载么,楼主

  • SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    deng20160807: 不错,学习学习

  • SSM框架——实现分页和搜索分页

    alining_1: 求源码
    ,1501911035@qq.com,谢谢

  • SSM框架——实现分页和搜索分页

    Alan_DM: 89680252@qq.com

  • SSM框架——实现分页和搜索分页

    Alan_DM: 能不能给个源码谢谢了

  • SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    小萝卜头17:
    问个问题,dao层查询如何获得一个sqlsession呢,还是你有其他操作方式

  • SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    bvgfww2: 大神厉害! 解决了!

  • SSM框架——实现分页和搜索分页

    qq_28227689:
    大神求源代码,邮箱1905646586@qq.com,跪求啊,谢谢了

  • SSM框架——使用MyBatis
    Generator自动创建代码

    qq_25246661:
    不错不错解决了很多问题

 

 

公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告|合作伙伴|论坛反馈

网站客服杂志客服微博客服webmaster@csdn.net400-600-2320|北京创新乐知信息技术有限公司 版权所有|江苏乐知网络技术有限公司
提供商务支持

京 ICP 证 09002463 号|Copyright © 1999-2014,
CSDN.NET, All Rights
Reserved 永利皇宫网址 36

永利皇宫网址 37

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注