Top > SAStrutsあれこれ > 「一覧表示画面+ページング機能付き」

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
-
|
-
|
!
!
|
!
|
|
|
|
|
|
|
-
|
-
|
-
|
!
|
!
|
!
!
package tutorial.action;
  
import java.util.List;
import javax.annotation.Resource;
import org.seasar.struts.annotation.ActionForm;
import org.seasar.struts.annotation.Execute;
import tutorial.entity.Employee;
import tutorial.form.PagingForm;
import tutorial.service.EmployeeService;
  
public class PagingAction {
  
    @ActionForm
    @Resource
    protected PagingForm pagingForm;
 
    @Resource
    protected EmployeeService employeeService;
    
    //Employeeテーブル結果セット
    public List<Employee>   empItems;
    
    //ページリンク文字列
    public String link;
    
    @Execute(validator = false, urlPattern = "turn/{pageno}")
    public String turn() {
        
        //1ページ当たりのレコード数
        final int PER_PAGE = 2;
        
        //レコードの総件数
        int totalRecNum = (int)employeeService.getCount();
        
        //ページリンク文字列作成
        link = makePagingLink(Integer.parseInt(pagingForm.pageno), totalRecNum, PER_PAGE);
        
        //対象ページ番号(pageno)に表示する分のレコードだけ取得
        //empItems = employeeService.select()
        //    .innerJoin("department")
        //   .orderBy("id")
        //    .limit(PER_PAGE)
        //    .offset((Integer.parseInt(pagingForm.pageno)-1)*PER_PAGE)
        //    .getResultList();
        empItems = employeeService.selectPerPage(pagingForm.pageno);
        
        return "index.jsp";
    }
    
    /**
     * ページリンク文字列(HTML)を返します。
     * @param currentPageNo カレントのページ番号(1 origin)
     * @param totalRecNum 総レコード数
     * @param perPage 1ページ当たりのレコード数
     * @return ページリンク文字列
     */
    private String makePagingLink(int currentPageNo, int totalRecNum, int perPage) {
 
        //総ページ数を求めます。
        int pageNum = totalRecNum / perPage;
        String[] links = new String[pageNum];
        
        for( int i=1; i<=pageNum; i++ ) {
            if( i==currentPageNo ) {
                links[i-1] = String.format("<span class='pagelink-fontsize'><b>%d</b></span>", currentPageNo);
            } else {
                links[i-1] = String.format("<a class='pagelink-fontsize' title='Page %d' href='/sa-struts-tutorial/paging/turn/%d'>%d</a>", i, i, i);
            }
        }
        return implode(" ", links);
    }
    
    /**
     * 配列要素を文字列により連結する
     * @param glue 連結文字列
     * @param pieces 連結したい文字列の配列。
     * @return すべての配列要素の順序を変えずに、各要素間に glue  文字列をはさんで 1 つの文字列にして返します。
     */
    private static String implode(String glue, String[] pieces) {
        StringBuffer buf = new StringBuffer();
        for( int i=0; ; i++ ) {
            buf.append(pieces[i]);
            if( i == pieces.length -1 ) {
                break;
            }
            buf.append(glue);
        }
        return buf.toString();
    }
}
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 
 
 
 
 
-
|
|
|
|
!
package tutorial.form;
 
import org.seasar.struts.annotation.IntegerType;
import org.seasar.struts.annotation.Required;
 
public class PagingForm {
    //ページ番号
    @Required
    @IntegerType
    public String pageno;
}
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 
 
 
 
 
-
|
-
|
|
|
|
|
|
|
!
!
package tutorial.service;
 
import java.util.List;
import org.seasar.framework.beans.util.BeanMap;
import tutorial.entity.Employee;
 
public class EmployeeService extends AbstractService<Employee> {
    
    public List<Employee> selectPerPage(String pageno) {
        final int PER_PAGE = 2;
         return select()
                 .innerJoin("department")
                 .orderBy("id")
                 .limit(PER_PAGE)
                 .offset((Integer.parseInt(pageno)-1)*PER_PAGE)
                 .getResultList();
    }
}
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<%@page pageEncoding="UTF-8"%>
<html>
<head>
<title>Employee List With Paging</title>
</head>
<body>
${link}
<table border="1">
    <tr style="background-color: pink">
        <th>Id</th>
        <th>Name</th>
        <th>JobType</th>
        <th>Salary</th>
        <th>Department</th>
    </tr>
    <c:forEach var="e" varStatus="s" items="${empItems}">
        <tr style="background-color: "${ s.index % 2 == 0 ? 'white' : 'yellow'}">
            <td align="right">${f:h(e.id)}</td>
            <td>${f:h(e.name)}</td>
            <td>${f:h(e.jobType)}</td>
            <td align="right"><fmt:formatNumber value="${e.salary}" pattern="#,##0" /></td>
            <td align="right">${f:h(e.department.name)}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>
 


添付ファイル: fileemployee_page1.jpg 928件 [詳細]

リロード   新規 編集 凍結解除 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2012-08-08 (水) 23:26:11 (2925d)