ページング処理


問題の状況


下図に示すように、総投稿数とページインデックスが分かれている場合は、ページング処理のためのプログラムを作成したいと思います.

テストコード

public class PagerTest {
    public static void main(String[] args){

        long totalCount = 139;
        long pageIndex = 12;

        Pager pager = new Pager(totalCount);
        System.out.println(pager.html(pageIndex));
    }
}
以下に示す.

インプリメンテーションコード

public class Pager {
    long totalCount;
    long pageIndex;

    Pager(long count){
        totalCount = count;
    }

    public void setPageIndex(long pageIndex) {
        this.pageIndex = pageIndex;
    }

    public String aTagGenerator(String var){
        return "<a href='#'>" + var +"</a> \n";
    }

    public String aTagGenerator(long var){
        return "<a href='#'>" + var +"</a> \n";
    }

    public String aTagFocusGenerator(long var){
        return "<a href='#' class = 'on'>" + var +"</a> \n";
    }

    public int maxPageCalculator(long totalCount){
        return (int) Math.ceil(totalCount/10);
    }

    public String middleATag(){
        String result = "";

        int initialNumber = (int) Math.floor(pageIndex/10)*10 + 1;

        for(int i = initialNumber; i < initialNumber + 10; i++){ // 10개씩 출력
            if(i == pageIndex){
                result += aTagFocusGenerator(i);

            } else {
                result += aTagGenerator(i);
            }

            if(i > maxPageCalculator(totalCount)){ // 최대 페이지를 넘어가면 멈춤
                break;
            }
        };

        return result;
    }

    public String format(){
        return aTagGenerator("[처음]") +
                aTagGenerator("[이전]") +
                middleATag() +
                aTagGenerator("[다음]") +
                aTagGenerator("[마지막]");
    }

    public String html(long index){
       setPageIndex(index);
       return format();
    }
}

コメント


aTagGenerator,aTagfocusGeneratorの部分はパラメータとしてリンクを受信し,それを入れるとよいかもしれない.