Struts2分頁(yè)實(shí)現(xiàn)源碼
1.介紹
(1)Struts2相當(dāng)于是servlet,和servelt不同的是當(dāng)提交到struts.xml中之后,通過(guò)aciton標(biāo)簽就可以直接調(diào)用想用的方法,減少了代碼量。
(2)在ActionSuport中set方法是注入,即是set方法是獲取jsp頁(yè)面中傳過(guò)來(lái)的值,get方法是是向jsp頁(yè)面發(fā)送值,值得一提的是有了get和set方法之后就取代了servlet中的
request.getParameter("");和重定向的操作。在這里要重點(diǎn)理解get和set方法的使用。
(3)在struts2分頁(yè)中set和set方法更能突出它的用法。
2.下面來(lái)看實(shí)例把!
(1)首先訪問(wèn)這個(gè)頁(yè)面時(shí)就應(yīng)該查找出nowPage為1信息,所以在action中要判斷nowPage是否為空。
在jsp頁(yè)面的分頁(yè)判斷可以寫(xiě)為:
- <div>
 - <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=1">首頁(yè)</a>
 - <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=${nowPage-1<=1?1:nowPage-1}">上一頁(yè)</a>
 - <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=${nowPage+1>=page.countPage?page.countPage:nowPage+1}">下一頁(yè)</a>
 - <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=${page.countPage}">末頁(yè)</a>
 - </div>
 
當(dāng)然可以在Page中封裝好nowPage的判斷,在這里主要介紹action。
當(dāng)點(diǎn)擊下一頁(yè)的時(shí)候會(huì)連接到findAllPro.action這個(gè)struts.xml中的action,
struts.xml 文件為:
- <?xml version="1.0" encoding="GBK"?>
 - <!DOCTYPE struts PUBLIC
 - "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 - "http://struts.apache.org/dtds/struts-2.3.dtd">
 - <struts>
 - <package name="pro" namespace="/" extends="struts-default">
 - <action name="findAllPro" class="cn.csdn.hr.action.ProvinceAction" method="findAll">
 - <result>./list.jsp</result>
 - </action>
 - </package>
 - </struts>
 
從struts.xml中可以看出findAllPro連接到的是cn.csdn.hr.action.ProvinceAction下的findAll方法,我們?nèi)フ襊rovinceAction,為:
- // 分頁(yè)查詢(xún)
 - public String findAll() {
 - if ("".equals(nowPage) || nowPage == null) {
 - this.nowPage = 1;
 - }
 - System.out.println(nowPage + "==============");
 - page = new PageWhere("Province", nowPage, "where 1<2");
 - // page= page.getDatas();
 - return SUCCESS;
 - }
 
因?yàn)橐祷氐絡(luò)sp頁(yè)面,所以要寫(xiě)一個(gè)get方法來(lái)把page傳到j(luò)sp頁(yè)面中:
- // 得到page的值 ,并把得到的值放到page中,page可以獲取所有的東西
 - private PageWhere page;
 - public PageWhere getPage() {
 - return page;
 - }
 
這樣就把當(dāng)前頁(yè)的信息傳到了jsp中,但是在分頁(yè)的時(shí)候因?yàn)閚owPage是jsp和struts2來(lái)回傳的值,并且是一個(gè)變量,所以設(shè)置一個(gè)屬性nowPage,生成get和set方法,來(lái)獲取nowPage和把修改的nowPage傳到j(luò)sp中,整個(gè)ProvinceAction頁(yè)面為:
- package cn.csdn.hr.action;
 - import cn.csdn.hr.HibernateUtil.PageWhere;
 - import cn.csdn.hr.domain.Province;
 - import cn.csdn.hr.service.ProvinceService;
 - import cn.csdn.hr.service.ProvinceServiceImpl;
 - import com.opensymphony.xwork2.ActionSupport;
 - public class ProvinceAction extends ActionSupport {
 - /**
 - * get方法是向jsp頁(yè)面中傳值 set方法向獲取jsp頁(yè)面的值
 - */
 - private static final long serialVersionUID = 1L;
 - private ProvinceService provinceService = new ProvinceServiceImpl();
 - private Integer id;
 - private String name;
 - public ProvinceAction() {
 - super();
 - }
 - // 通過(guò)頁(yè)面注入進(jìn)來(lái)的。id的名稱(chēng)一定要和表單中 的一致
 - public void setId(Integer id) {
 - this.id = id;
 - }
 - public void setName(String name) {
 - this.name = name;
 - }
 - // 接收傳過(guò)來(lái)的nowPage
 - private Integer nowPage;
 - public void setNowPage(Integer nowPage) {
 - this.nowPage = nowPage;
 - }
 - public Integer getNowPage() {
 - return nowPage;
 - }
 - // 得到page的值 ,并把得到的值放到page中,page可以獲取所有的東西
 - private PageWhere page;
 - public PageWhere getPage() {
 - return page;
 - }
 - // 分頁(yè)查詢(xún)
 - public String findAll() {
 - if ("".equals(nowPage) || nowPage == null) {
 - this.nowPage = 1;
 - }
 - System.out.println(nowPage + "==============");
 - page = new PageWhere("Province", nowPage, "where 1<2");
 - // page= page.getDatas();
 - return SUCCESS;
 - }
 - }
 
整個(gè)jsp頁(yè)面為:
- <body>
 - <div align="center">
 - <h3>
 - 省市操作
 - </h3>
 - <table border="1px" cellpadding="0px" cellspacing="0px" width="300px">
 - <tr>
 - <th>
 - 編號(hào)
 - </th>
 - <th>
 - 省名
 - </th>
 - <th>
 - 操作
 - </th>
 - </tr>
 - <tbody>
 - <c:forEach items="${page.datas}" var="entity">
 - <tr align="center">
 - <td>
 - ${entity.id}
 - </td>
 - <td>
 - ${entity.name}
 - </td>
 - <td>
 - <a href="${pageContext.request.contextPath}/insert.jsp">添加</a>
 - <a href="${pageContext.request.contextPath}/delPro.action?id=${entity.id}">刪除</a>
 - <a href="${pageContext.request.contextPath}/updatePro.action?id=${entity.id}">編輯</a>
 - </td>
 - </tr>
 - </c:forEach>
 - </tbody>
 - </table>
 - <br/>
 - <div>
 - <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=1">首頁(yè)</a>
 - <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=${nowPage-1<=1?1:nowPage-1}">上一頁(yè)</a>
 - <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=${nowPage+1>=page.countPage?page.countPage:nowPage+1}">下一頁(yè)</a>
 - <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=${page.countPage}">末頁(yè)</a>
 - </div>
 - </div>
 - </body>
 
以上數(shù)據(jù)和從hibernate配置的數(shù)據(jù)庫(kù)中讀取出來(lái)的,分頁(yè)學(xué)會(huì)了,這個(gè)就是小case了。主要看其中的注釋就ok了。但是在寫(xiě)更新的時(shí)候需要注意:
更新需要在更新完之后要在內(nèi)部跳轉(zhuǎn)到查詢(xún)的頁(yè)面,所以結(jié)果應(yīng)寫(xiě)為:
- <result type="chain">findAllPro</result>
 
記住要寫(xiě)type、類(lèi)型。
原文鏈接:http://blog.csdn.net/hanxiaoshuang321123/article/details/7323116
【編輯推薦】















 
 
 
 
 
 
 