FrontPage > SAStrutsの覚書 > サンプルアプリ

検索結果のページング

先に作成した検索画面の検索結果に対し、ページング処理を追加する。

1. Actionフォーム

SearchEmpForm.javaに下記のフィールドを追加する。

/** 全件数 */
public long totalCount;
/** 全ページ数 */
public long totalPage;
/** ページ */
public long page;

2. JSP

searchEmp.jspに下記のように、ページ送りボタン等を追加する。

・・・略・・・
<s:submit property="search" value="検索"/>
<br><br>
全${totalCount}件 <s:submit property="prevPage" value="<" disabled="${page <= 1 }"/> 
【${page}<html:hidden property="page"/>/${totalPage}ページ】 
<s:submit property="nextPage" value=">" disabled="${page == totalPage }"/>
<div id="dataHeader"  class="dataHeader" style="width:457px;">
・・・略・・・

3. ページ制御用クラス

PageCondition.javaを以下のように作成する。

package com.ziqoo.sassample.condition;

public class PageCondition {
   public int limitCount;
   public long page;
   private long totalCount;
   private long totalPage;

   public void setTotalCount(long totalCount) {
       this.totalCount = totalCount;
       this.totalPage = (totalCount + limitCount -1) / limitCount;
       if (this.page > this.totalPage) {
           this.page = this.totalPage;
       }
   }

   public long getTotalCount() {
       return this.totalCount;
   }

   public long getTotalPage() {
       return this.totalPage;
   }

   /**
    * 検索を開始するオフセットを求める。
    *
    * @return オフセット
    */
   public int getOffset() {
       if (this.totalCount == 0)
           return 0;
       else
           return (int)(page -1) * limitCount;
   }
}

4. Actionクラス

SearchEmpAction.javaを以下のように変更する。

package com.ziqoo.sassample.action;

import javax.annotation.Resource;

import org.seasar.framework.beans.util.Beans;
import org.seasar.struts.annotation.ActionForm;
import org.seasar.struts.annotation.Execute;

import com.ziqoo.sassample.condition.PageCondition;
import com.ziqoo.sassample.condition.SearchEmpCondition;
import com.ziqoo.sassample.form.SearchEmpForm;
import com.ziqoo.sassample.service.DeptService;
import com.ziqoo.sassample.service.EmpService;

public class SearchEmpAction {

	@Resource
	protected DeptService deptService;
	@Resource
	protected EmpService empService;

	@Resource
	@ActionForm
	protected SearchEmpForm searchEmpForm;

	private static final int LIMIT_COUNT = 5;

	/**
	 * 検索画面表示
	 * @return
	 */
	@Execute(validator=false)
	public String index() {
		searchEmpForm.totalCount = 0;
		searchEmpForm.totalPage = 0;
		searchEmpForm.page = 0;

		// 部門選択リスト作成
		searchEmpForm.deptList = deptService.findAllOrderById();

		return "searchEmp.jsp";
	}

	/**
	 * 従業員検索
	 * @return
	 */
	@Execute(validator=true, input="index")
	public String search() {
		searchEmp(1);
		return "searchEmp.jsp";
	}

	/**
	 * 次ページ
	 * @return
	 */
	@Execute(validator=true, input="index")
	public String nextPage() {
		searchEmp(searchEmpForm.page + 1);
		return "searchEmp.jsp";
	}

	/**
	 * 前ページ
	 * @return
	 */
	@Execute(validator=true, input="index")
	public String prevPage() {
		searchEmp(searchEmpForm.page - 1);
		return "searchEmp.jsp";
	}

	private void searchEmp(long page) {
		// 部門選択リスト作成
		searchEmpForm.deptList = deptService.findAllOrderById();

		// 検索条件コピー
		SearchEmpCondition condition = Beans.createAndCopy(SearchEmpCondition.class, searchEmpForm).execute();

		PageCondition pageCondition = new PageCondition();
		pageCondition.limitCount = LIMIT_COUNT;
		pageCondition.page = page;

		// 従業員検索
		searchEmpForm.empList = empService.find(condition, pageCondition);

		searchEmpForm.totalCount = pageCondition.getTotalCount();
		searchEmpForm.totalPage = pageCondition.getTotalPage();
		searchEmpForm.page = pageCondition.page;

	}
}

5. サービスクラス

EmpService.javaのfindメソッドを以下のように変更する。

   public List<SearchEmpDto> find(SearchEmpCondition condition, PageCondition pageCondition) {
	if (StringUtil.isNotEmpty(condition.empNoCondition)) {
		condition.empNoCondition += "%";
	}
	if (StringUtil.isNotEmpty(condition.empNameCondition)) {
		condition.empNameCondition += "%";
	}
	// 件数取得
        pageCondition.setTotalCount(jdbcManager.getCountBySqlFile(SqlFiles.SERVICE_EMP_SERVICE_FIND, condition));

        if (pageCondition.getTotalCount() == 0) {
           return null;
        }

	// 検索
	return jdbcManager
		.selectBySqlFile(SearchEmpDto.class, SqlFiles.SERVICE_EMP_SERVICE_FIND, condition)
		.limit(pageCondition.limitCount)
		.offset(pageCondition.getOffset())
		.getResultList();
   }

6. 実行結果

sassample05.jpg

添付ファイル: filesassample05.jpg 96件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-01-12 (木) 00:16:34 (2468d)