Struts2分頁實現(xiàn)源碼
1.介紹
(1)Struts2相當于是servlet,和servelt不同的是當提交到struts.xml中之后,通過aciton標簽就可以直接調用想用的方法,減少了代碼量。
(2)在ActionSuport中set方法是注入,即是set方法是獲取jsp頁面中傳過來的值,get方法是是向jsp頁面發(fā)送值,值得一提的是有了get和set方法之后就取代了servlet中的
request.getParameter("");和重定向的操作。在這里要重點理解get和set方法的使用。
(3)在struts2分頁中set和set方法更能突出它的用法。
2.下面來看實例把!
(1)首先訪問這個頁面時就應該查找出nowPage為1信息,所以在action中要判斷nowPage是否為空。
在jsp頁面的分頁判斷可以寫為:
- <div>
- <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=1">首頁</a>
- <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=${nowPage-1<=1?1:nowPage-1}">上一頁</a>
- <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=${nowPage+1>=page.countPage?page.countPage:nowPage+1}">下一頁</a>
- <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=${page.countPage}">末頁</a>
- </div>
當然可以在Page中封裝好nowPage的判斷,在這里主要介紹action。
當點擊下一頁的時候會連接到findAllPro.action這個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方法,我們去找ProvinceAction,為:
- // 分頁查詢
- 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;
- }
因為要返回到jsp頁面,所以要寫一個get方法來把page傳到jsp頁面中:
- // 得到page的值 ,并把得到的值放到page中,page可以獲取所有的東西
- private PageWhere page;
- public PageWhere getPage() {
- return page;
- }
這樣就把當前頁的信息傳到了jsp中,但是在分頁的時候因為nowPage是jsp和struts2來回傳的值,并且是一個變量,所以設置一個屬性nowPage,生成get和set方法,來獲取nowPage和把修改的nowPage傳到jsp中,整個ProvinceAction頁面為:
- 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頁面中傳值 set方法向獲取jsp頁面的值
- */
- private static final long serialVersionUID = 1L;
- private ProvinceService provinceService = new ProvinceServiceImpl();
- private Integer id;
- private String name;
- public ProvinceAction() {
- super();
- }
- // 通過頁面注入進來的。id的名稱一定要和表單中 的一致
- public void setId(Integer id) {
- this.id = id;
- }
- public void setName(String name) {
- this.name = name;
- }
- // 接收傳過來的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;
- }
- // 分頁查詢
- 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;
- }
- }
整個jsp頁面為:
- <body>
- <div align="center">
- <h3>
- 省市操作
- </h3>
- <table border="1px" cellpadding="0px" cellspacing="0px" width="300px">
- <tr>
- <th>
- 編號
- </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">首頁</a>
- <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=${nowPage-1<=1?1:nowPage-1}">上一頁</a>
- <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=${nowPage+1>=page.countPage?page.countPage:nowPage+1}">下一頁</a>
- <a href="${pageContext.request.contextPath}/findAllPro.action?nowPage=${page.countPage}">末頁</a>
- </div>
- </div>
- </body>
以上數(shù)據(jù)和從hibernate配置的數(shù)據(jù)庫中讀取出來的,分頁學會了,這個就是小case了。主要看其中的注釋就ok了。但是在寫更新的時候需要注意:
更新需要在更新完之后要在內部跳轉到查詢的頁面,所以結果應寫為:
- <result type="chain">findAllPro</result>
記住要寫type、類型。
原文鏈接:http://blog.csdn.net/hanxiaoshuang321123/article/details/7323116
【編輯推薦】