jsp分頁的處理(SSM框架舉例)

首先我們需要一個工具類Page類來表達:

import java.util.List;

public class Page
{
  private int everyPage = 10;		//每頁顯示的條數
  private int totalCount;			//總共需要顯示的條數
  private int totalPage;			//總共需要顯示的頁數
  private int beginPage = 1;		//開始的頁數
  private boolean hasPrePage;		//是否有上一頁
  private boolean hasNextPage;		//是否有下一頁
  private List list;				//用來存儲的數據結構(統一爲一個list)
  
  /**
   * 初始化:當獲得了總共需要顯示的條數後即可執行這個方法
   */
  public void init(){
	  int totalPage = totalCount % everyPage == 0 ? totalCount / everyPage : totalCount / everyPage + 1;
	  this.setTotalPage(totalPage);
	  this.setHasNextPage(beginPage >= totalCount);
	  this.setHasPrePage(beginPage <= 1);
  }
  
  public int getEveryPage()
  {
    return this.everyPage;
  }
  
  public void setEveryPage(int everyPage)
  {
    this.everyPage = everyPage;
  }
  
  public int getTotalCount()
  {
    return this.totalCount;
  }
  
  public void setTotalCount(int totalCount)
  {
    this.totalCount = totalCount;
  }
  
  public int getTotalPage()
  {
    return this.totalPage;
  }
  
  public void setTotalPage(int totalPage)
  {
    this.totalPage = totalPage;
  }
  
  public int getBeginPage()
  {
    return this.beginPage;
  }
  
  public void setBeginPage(int beginPage)
  {
    this.beginPage = beginPage;
  }
  
  public boolean isHasPrePage()
  {
    return this.hasPrePage;
  }
  
  public void setHasPrePage(boolean hasPrePage)
  {
    this.hasPrePage = hasPrePage;
  }
  
  public boolean isHasNextPage()
  {
    return this.hasNextPage;
  }
  
  public void setHasNextPage(boolean hasNextPage)
  {
    this.hasNextPage = hasNextPage;
  }
  
  public List getList()
  {
    return this.list;
  }
  
  public void setList(List list)
  {
    this.list = list;
  }
  
}

假設你有這麼一個類Microblog,其結構如下:

public class Microblog {
    
    private Integer id;
	
    /**
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column microblog.userId
     * 這條微博現在屬於誰
     * @mbggenerated
     */
    private Integer userid;

    /**
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column microblog.content
     * 這條微博的內容
     * @mbggenerated
     */
    private String content;

    /**
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column microblog.time
     * 這條微博現在發佈的時間
     * @mbggenerated
     */
    private Date  time;
    
    /**
     * 這條微博是否是轉載的,是轉載的爲true,否則爲false
     */
    private Boolean isForward;
    
    private Integer sourceuserid;
    
    /**
     * 這條博客的原創博客的id(原創的話即爲0)
     */
    private Integer sourceMicroblogId;
    
    /**
     * 你轉發的那條微博(不一定是原創的那一條,原創的話即爲0)
     */
    private Integer forwardMicroblogId;
	
	/*接下來就是相應的get和set方法,博主在此省略*/
}

接下來看看底層如何獲取這些數據,(假設你此時需要取得一條微博的所有轉發微博)xml文件對應的mybatis代碼爲:

<select id="selectPageByForwardMicroblogId" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    select 
    <include refid="Base_Column_List" />
    from microblog
    where forwardMicroblogId = #{0,jdbcType=INTEGER} order by time desc limit #{1,jdbcType=INTEGER},#{2,jdbcType=INTEGER}
</select>

其對應接口中的方法聲明爲:(接口爲MicroblogMapper)

/**
	 * 查看當前頁面的轉發評論
	 * @param forwardMicroblogId
	 * @param beginPage	從第幾個開始尋找幾個,這個是從0開始的(並不是第幾頁)
	 * @param everyPage	一頁多少條記錄
	 * @return
	 */
	List<Microblog> selectPageByForwardMicroblogId(Integer forwardMicroblogId, int beginPage, int everyPage);

Service層的寫法爲:

List<Microblog> microblogs = this.microblogMapper.selectPageByForwardMicroblogId(
				microblog.getForwardMicroblogId(), (page.getBeginPage() - 1)*page.getEveryPage(), page.getEveryPage());
int totalCount = this.microblogMapper.countByForwardMicroblogId(microblog.getForwardMicroblogId());
page.setList(microblogs);
page.setTotalCount(totalCount);
page.init();


Controller層的寫法:

	@RequestMapping("user/microblog_showForwardMore")
	public String showForwardMore(Microblog microblog, Page page, ModelMap modelMap){
		page = this.microblogService.getTenByForward(microblog,page);
		Microblog mic = this.microblogService.findOne(microblog.getForwardMicroblogId());
		modelMap.addAttribute("microblog", mic);
		modelMap.addAttribute("Page", page);
		modelMap.addAttribute("partSelect",1);
		return "/user/showMore";
	}

接下來,你再將page傳給頁面,定義爲“Page”(博主並沒有轉化爲JSON數據,因爲暫時還沒有接觸,但其實變成JSON更好,因爲這樣在使用前臺的框架時可以更加方便並且可以更加通用,假如你的前臺並不是jsp),其使用大致爲

<c:forEach var="m" items="${Page.list}">
		<div style="border: 1px solid black">
			<a href="user_scan.action?id=${m.sourceUser.id}">@${m.sourceUser.name}</a>:${m.forwardRemark }
			<c:forEach items="${m.forwardRemarks}" var="r">
				<a href="user_scan.action?id=${r.userId}">@${r.userName }</a>${r.remark }
		   			</c:forEach>
			time:${m.getNTime()}<br /> <a href="#"
				οnclick="prom(${m.sourceMicroblogId==0?m.id:m.sourceMicroblogId }, ${m.id})">
				(轉發${m.getForwards() }) </a> <br />
		</div>
	</c:forEach>
取數據是比較簡單的,因爲可以利用各種前臺標籤(SSM貌似支持最基礎的C標籤,如果大家知道可以用其他標籤的話,請告訴博主,博主將感激不盡),主要說一下首頁、上一頁、下一頁的顯示:
<a
			href="microblog_showForwardMore.action?forwardMicroblogId=${Microblog.forwardMicroblogId }&sourceMicroblogId=${Microblog.sourceMicroblogId}&beginPage=1"><input
				type="button" class="className" value=" 首 頁  " />   </a>
		<c:choose>
				<c:when test="${Page.beginPage == 1}">
					<input type="button" class="className" style="width: 55px;"
						value="上一頁" />
				</c:when>
				<c:otherwise>
					<a
						href="microblog_showForwardMore.action?forwardMicroblogId=${Microblog.forwardMicroblogId }&sourceMicroblogId=${Microblog.sourceMicroblogId}&beginPage=${Page.beginPage-1}"><input
						type="button" class="className" style="width: 55px;" value="上一頁" /></a>
				</c:otherwise>
			</c:choose>
		 共
			${Page.totalCount }條記錄,
		
		每頁
			${Page.getEveryPage() }條
		
		${Page.beginPage }/${Page.totalPage} 
			<c:choose>
				<c:when test="${Page.beginPage >= Page.totalPage}">
					<input type="button" class="className" style="width: 55px;"
						value="下一頁" />
				</c:when>
				<c:otherwise>
					<a
					href="microblog_showForwardMore.action?forwardMicroblogId=${Microblog.forwardMicroblogId }&sourceMicroblogId=${Microblog.sourceMicroblogId}&beginPage=${Page.beginPage+1}"><input
					type="button" class="className" style="width: 55px;" value="下一頁" /></a>
				</c:otherwise>
			</c:choose>
		 
		<a
			href="microblog_showForwardMore.action?forwardMicroblogId=${Microblog.forwardMicroblogId }&sourceMicroblogId=${Microblog.sourceMicroblogId}&beginPage=${Page.totalPage } ">   <input
				type="button" class="className" value="尾 頁" /></a>

點擊首頁這些按鈕時,改變的只有一個beginPage屬性而已,請謹記。

總結:博主最開始的分頁是在利用struts2寫的,當時看了一個晚上,結果寫的時候還是磕磕絆絆,但是當你真正實現了一個之後,再看別人寫的就不再那麼困難了,所以“千里之行始於足下”,希望大家能早日完成自己的功能!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章