天天看點

S2SH 分頁

核心代碼:Page.java,PageUtil.java,Result.java

下載下傳位址為:http://download.csdn.net/detail/clint2002/5371655

具體使用方法:

1、把這三個類放到src下,包名為com.clint.fenye(或其他名字)

2、在需要顯示分頁的那個闆塊的DaoImpl中添加如下方法并在Dao中添加接口(2個,紅色為核心代碼log.debug等為自動生成的,getSession() 可能報錯,原因可能是我們使用Hibernate所寫的方法不同,我繼承的是HibernateDaoSupport接口):

  //傳一個Page進去, 如Lxr為資料庫中表名,目的是從資料庫中查詢出所有的

public List findAll(Page page) {

log.debug("finding all Lxr  instances");

try {

String queryString = "from Lxr";

Query queryObject = getSession().createQuery(queryString);

queryObject.setFirstResult(page.getBeginIndex());

queryObject.setMaxResults(page.getEveryPage());

return queryObject.list();

} catch (RuntimeException re) {

log.error("find all failed", re);

throw re;

}

}

//傳回查詢的總條數

public int queryLxrConut() {

log.debug("finding all Lxr instances");

try {

String queryString = "from Lxr";

Query queryObject = getSession().createQuery(queryString);

return queryObject.list().size();

} catch (RuntimeException re) {

log.error("find all failed", re);

throw re;

}

}

3、在相應serviceImpl中配置,并在service添加相應接口,serviceImpl示例如下:

public class LxrServiceImpl implements  LxrService{

private LxrDAO lxrDAO;

public LxrDAO getLxrDAO() {

return lxrDAO;

}

public void setLxrDAO(LxrDAO lxrDAO) {

this.lxrDAO = lxrDAO;

}

public Result findLxrByPage(Page page) {

page = PageUtil.createPage(page, lxrDAO.queryLxrConut());

List<Lxr> lxrs = lxrDAO.findAll(page);

Result result = new Result();

result.setList(lxrs);

result.setPage(page);

return result;

}

4、建立action(名字随便取,不過得--如UserFindAllAction等):

注:引入相關的類和繼承合适的類,我這是直接繼承的ActionSupport,若Base中已繼承相關接口,則繼承Base類。

public class LxrFindAllAction extends ActionSupport {

private LxrService lxrService;  //相關的service,

private Integer currentPage;   //設定目前頁

public Integer getCurrentPage() {

return currentPage;

}

public void setCurrentPage(Integer currentPage) {

this.currentPage = currentPage;

}

public LxrService getLxrService() {

return lxrService;

}

public void setLxrService(LxrService lxrService) {

this.lxrService = lxrService;

}

public String execute() throws Exception {

Page page = new Page();

page.setEveryPage(10);

if(currentPage == null) {

currentPage = new Integer(1);

}

page.setCurrentPage(currentPage);

Result result = lxrService.findLxrByPage(page);

HttpServletRequest request = ServletActionContext.getRequest();

request.setAttribute("lxrs", result.getList());  //轉到request域中

request.setAttribute("page", result.getPage());

return this.SUCCESS;

}

}

5、在顯示頁面(jsp)中擷取分頁資訊:我這用的是一個表格(根據超連結把參數轉到struts中)

            <tr>

             <td colspan="11" align="center">

             <s:if test="#request.page.hasPrePage">

             <a href="lxrFindAll.action?currentPage=1" target="_blank" rel="external nofollow" >首頁</a>

             <a href="lxrFindAll.action?currentPage=${request.page.currentPage - 1 }" target="_blank" rel="external nofollow" >上一頁</a>

             </s:if>

             <s:else>

             首頁

             上一頁

             </s:else>

             <s:if test="#request.page.hasNextPage">

             <a href="lxrFindAll.action?currentPage=${request.page.currentPage + 1 }" target="_blank" rel="external nofollow" >下一頁</a>

             <a href="lxrFindAll.action?currentPage=${request.page.totalPage }" target="_blank" rel="external nofollow" >尾頁</a>

             </s:if>

             <s:else>

             下一頁

             尾頁

             </s:else>

             目前第${page.currentPage}頁,共${page.totalPage}頁,共有${page.totalCount}條記錄。

             </td>

            </tr>  

6、配置struts.xml(具體怎麼轉根據具體情況;如下),

  注意:得在spring配置檔案中配置相應的action。

<action name="lxrFindAll" class="lxrFindAllAction">

     <result name="success">/form/ShowLxr.jsp</result>

  </action>

若有不懂處,請留言,我看到會盡快解決你的問題,此外,我也是菜鳥一個,若有什麼更好的分頁方法,我們可以互相讨論,互相學習--

繼續閱讀