본문 바로가기

프레임워크/Struts2

[실전]struts2 페이징리스트 처리하기

현재 작업이 완료된 파일의 내용 일부를 발췌한 것입니다.
물론 잘 돌아가구 있구요.
DB는 PostgreSql8.4를 사용중입니다.
혹시 보시다가 다소 내용이 부족하더라도 이해해주세요^^

1. ListDTO.java 작성
public class ListDTO {
 private int firstPage;//첫페이지번호
 private int lastPage;//마지막 페이지번호
 private int totalCount;//총글의 개수
 private int prevPage;//이전 단원의 page 시작번호
 private int nextPage;//이후 단원의 page 시작번호
 private int nowCount;//현재 읽은 글의개수

 public int getFirstPage() {
  return firstPage;
 }
 public void setFirstPage(int firstPage) {
  this.firstPage = firstPage;
 }
 public int getLastPage() {
  return lastPage;
 }
 public void setLastPage(int lastPage) {
  this.lastPage = lastPage;
 }
 public int getTotalCount() {
  return totalCount;
 }
 public void setTotalCount(int totalCount) {
  this.totalCount = totalCount;
 }
 public int getPrevPage() {
  return prevPage;
 }
 public void setPrevPage(int prevPage) {
  this.prevPage = prevPage;
 }
 public int getNextPage() {
  return nextPage;
 }
 public void setNextPage(int nextPage) {
  this.nextPage = nextPage;
 }
 public int getNowCount() {
  return nowCount;
 }
 public void setNowCount(int nowCount) {
  this.nowCount = nowCount;
 }
}

2. Action클래스 작성(TotalBoardListAction.java)
public class TotalBoardListAction {
 private List<TotalBoardDTO> totalBoardList;
 private int page;
 private ListDTO listDto;
    private List<Integer> pagingList;
    private String searchType = "";
    private String searchText = "";
   
    /**
     * 비즈니스로직 메소드
     * @return success or failure
     * @throws Exception
     */
    public String execute() throws Exception {
     int tempPage = 1;
     int pageCount = 10; //한페이지에 글을 몇개씩 보여줄 것인가
     int limitPageCount = 0; //앞에 몇개를 제외할 것인가
     int totalCount = 0; //총 데이타수
     int startPage = 0; //페이징되는 번호의 시작
     int endPage = 0; //페이징되는 번호의 끝
     TotalBoardDAO totalBoardDao = new TotalBoardDAO();
     listDto = new ListDTO();
     pagingList = new ArrayList<Integer>();

/**************** 여기부터 ListDTO클래스에 셋팅하는부분 ****************/
//현재페이지가0이면 로 셋팅
     if(getPage() == 0) setPage(tempPage);
//10개씩 제외
     limitPageCount = (getPage() - 1) * pageCount ;
     
     totalCount = totalBoardDao.getCount(searchText);
     
//글의 전체카운트
     listDto.setTotalCount(totalCount);
//끝
     listDto.setLastPage((totalCount - 1)/ pageCount  + 1);
//리스트 하단부 페이징 시작번호
     startPage = ((getPage() - 1) / pageCount ) * pageCount  + 1;
     
//리스트 하단부 페이징 끝번호
  if(startPage + 9 > listDto.getLastPage()) {
   endPage = listDto.getLastPage();
  }else{
   endPage = startPage + 9;
  }
  
//이전
  if(getPage() <= pageCount ) {
   listDto.setPrevPage(1);
  }else{
   listDto.setPrevPage(startPage - pageCount );
  }
  
//다음
  if(startPage + pageCount  > listDto.getLastPage()) {
   listDto.setNextPage(listDto.getLastPage());
  }else{
   listDto.setNextPage(startPage + pageCount );
  }
  
//리스트 하단부 페이징 번호를 저장
  for(int i = startPage; i <= endPage; i++){
   pagingList.add(i);
  }
/**********************************************************************/

     totalBoardList = new ArrayList<TotalBoardDTO>();
     
     totalBoardList.addAll(totalBoardDao.getList(pageCount, limitPageCount, searchText));
        return "success";
    }

 public List<TotalBoardDTO> getTotalBoardList() {
  return totalBoardList;
 }

 public void setTotalBoardList(List<TotalBoardDTO> totalBoardList) {
  this.totalBoardList = totalBoardList;
 }

 public int getPage() {
  return page;
 }

 public void setPage(int page) {
  this.page = page;
 }

 public ListDTO getlistDto() {
  return listDto;
 }

 public void setlistDto(ListDTO listDto) {
  this.listDto = listDto;
 }

 public List<Integer> getPagingList() {
  return pagingList;
 }

 public void setPagingList(List<Integer> pagingList) {
  this.pagingList = pagingList;
 }

 public ListDTO getListDto() {
  return listDto;
 }

 public void setListDto(ListDTO listDto) {
  this.listDto = listDto;
 }

 public String getSearchType() {
  return searchType;
 }

 public void setSearchType(String searchType) {
  this.searchType = searchType;
 }

 public String getSearchText() {
  return searchText;
 }

 public void setSearchText(String searchText) {
  this.searchText = searchText;
 }
}

3. totalBoardList.jsp 작성
......
......
<tr>
     <td colspan="4" align="center">
      <s:url id="firstPageLink" action="totalBoardList">
       <s:param name="page"><s:property value="listDto.firstPage"/></s:param>
       <s:param name="searchType"><s:property value="searchType"/></s:param>
       <s:param name="searchText"><s:property value="searchText"/></s:param>
      </s:url>
      <s:a href="%{firstPageLink}">처음</s:a>&nbsp;&nbsp;
      <s:url id="prevPageLink" action="totalBoardList">
       <s:param name="page"><s:property value="listDto.prevPage"/></s:param>
       <s:param name="searchType"><s:property value="searchType"/></s:param>
       <s:param name="searchText"><s:property value="searchText"/></s:param>
      </s:url>
      <s:a href="%{prevPageLink}">이전</s:a>&nbsp;&nbsp;
      
      <s:subset source="pagingList">
       <s:iterator>
        <s:url id="nowPageLink" action="totalBoardList">
         <s:param name="page"><s:property/></s:param>
         <s:param name="searchType"><s:property value="searchType"/></s:param>
         <s:param name="searchText"><s:property value="searchText"/></s:param>
        </s:url>
        <s:a href="%{nowPageLink}"><s:property/></s:a>&nbsp;&nbsp;
       </s:iterator>
      </s:subset>
      <s:url id="nextPageLink" action="totalBoardList">
       <s:param name="page"><s:property value="listDto.nextPage"/></s:param>
       <s:param name="searchType"><s:property value="searchType"/></s:param>
       <s:param name="searchText"><s:property value="searchText"/></s:param>
      </s:url>
      <s:a href="%{nextPageLink}">다음</s:a>&nbsp;&nbsp;
      <s:url id="lastPageLink" action="totalBoardList">
       <s:param name="page"><s:property value="listDto.lastPage"/></s:param>
       <s:param name="searchType"><s:property value="searchType"/></s:param>
       <s:param name="searchText"><s:property value="searchText"/></s:param>
      </s:url>
      <s:a href="%{lastPageLink}">마지막</s:a>
     </td>
    </tr>
......
......

이로서 jsp의 코딩이 아주 간결해졌다.
더 좋은 방법도 있겠지만 난 이 방법이 좋다..ㅎㅎ;;