ArticlePage<T>
- ArticlePage<VolunteerVo> 에서 volunteerVO를 제너릭 타입으로 넣는 이유 : ArticlePage 클래스가 다양한 유형의 데이터를 처리할 수 있도록 하기 위해서 입니다.
- 자바에서 제네릭은 클래스나 메서드가 사용할 데이터 타입을 명시적으로 지정하지 않고, 다양한 타입을 유연하게 처리할 수 있게 합니다.
- ArticlePage<VolunteerVo> : T는 VolunteerVO로 대체됩니다. 즉, 이 페이지는 VolunteerVO 타입의 데이터를 처리하게 됩니다.
제네릭을 왜 사용하는가?
- 제네릭을 사용하지 않고 모든 데이터를 Object로 처리할 수 있지만, 제네릭을 사용하면 타입 안정성을 보장할 수 있습니다.
- 즉, 컴파일 시점에 타입 체크가 가능해지고, 잘못된 타입을 사용할 경우 컴파일 오류가 발생하여 오류를 예방 할 수 있습니다.
ArticlePage.java
package kr.or.ddit.util;
import java.util.List;
//페이징 관련 정보 + 게시글 정보
public class ArticlePage<T> {
//전체글 수
private int total;
// 현재 페이지 번호
private int currentPage;
// 전체 페이지수
private int totalPages;
// 블록의 시작 페이지 번호 ex) [1][2][3] 에서의 1
private int startPage;
//블록의 종료 페이지 번호 ex) [1][2][3] 에서의 3
private int endPage;
//검색어
private String keyword = "";
//구분
private String queGubun = "";
//요청URL
private String url = "";
//select 결과 데이터
private List<T> content;
//페이징 처리
private String pagingArea = "";
// ajax전용 생성자
// 게시글
public ArticlePage(int total, int currentPage, int size, List<T> content, String keyword, String queGubun) {
// size : 한 화면에 보여질 목록의 행 수
this.total = total;// 753
this.currentPage = currentPage;// 1
this.content = content;
this.keyword = keyword;
this.queGubun = queGubun;
System.out.println("ArticlePage >> keyword : " + keyword);
System.out.println("ArticlePage >> queGubun : " + queGubun);
// 전체글 수가 0이면?
if (total == 0) {
totalPages = 0;// 전체 페이지 수
startPage = 0;// 블록 시작번호
endPage = 0; // 블록 종료번호
} else {// 글이 있다면
// 전체 페이지 수 = 전체글 수 / 한 화면에 보여질 목록의 행 수
// 3 = 31 / 10
totalPages = total / size;// 75
// 나머지가 있다면, 페이지를 1 증가
if (total % size > 0) {// 나머지3
totalPages++;// 76
}
// 페이지 블록 시작번호를 구하는 공식
// 블록시작번호 = 현재페이지 / 페이지크기 * 페이지크기 + 1
startPage = currentPage / 5 * 5 + 1;// 1
// 현재페이지 % 페이지크기 => 0일 때 보정
if (currentPage % 5 == 0) {
startPage -= 5;
}
// 블록종료번호 = 시작페이지번호 + (페이지크기 - 1)
// [1][2][3][4][5][다음]
endPage = startPage + (5 - 1);// 5
// 종료페이지번호 > 전체페이지수
if (endPage > totalPages) {
endPage = totalPages;
}
}
pagingArea += "<div class='col-sm-12 col-md-7'>";
pagingArea += "<div class='dataTables_paginate paging_simple_numbers' id='example2_paginate'>";
pagingArea += "<ul class='pagination'>";
pagingArea += "<li class='paginate_button page-item previous ";
if (this.startPage < 6) {
pagingArea += "disabled ";
}
pagingArea += "'";
pagingArea += "id='example2_previous'>";
pagingArea += "<a href='#' onclick=\"getList('" + this.keyword + "', " + (this.startPage - 5)
+ ", " + this.queGubun + ")\" aria-controls='example2' data-dt-idx='0' tabindex='0' ";
pagingArea += "class='page-link'><<</a></li>";
for (int pNo = this.startPage; pNo <= this.endPage; pNo++) {
pagingArea += "<li class='paginate_button page-item ";
if (this.currentPage == pNo) {
pagingArea += "active";
}
pagingArea += "'>";
pagingArea += "<a href='#' onclick=\"getList('" + this.keyword + "', " + pNo
+ ", " + this.queGubun + ")\" aria-controls='example2' data-dt-idx='1' tabindex='0' ";
pagingArea += "class='page-link'>" + pNo + "</a>";
pagingArea += "</li>";
}
pagingArea += "<li class='paginate_button page-item next ";
if (this.endPage >= this.totalPages) {
pagingArea += "disabled";
}
pagingArea += "' id='example2_next'><a ";
pagingArea += "href='#' onclick=\"getList('" + this.keyword + "', " + (this.startPage + 5)
+ ", " + this.queGubun + ")\" aria-controls='example2' data-dt-idx='7' ";
pagingArea += "tabindex='0' class='page-link'>>></a></li>";
pagingArea += "</ul>";
pagingArea += "</div>";
pagingArea += "</div>";
}// end ajax전용 생성자
// 구분 없는 생성자
// ajax전용 생성자
public ArticlePage(int total, int currentPage, int size, List<T> content, String keyword) {
// size : 한 화면에 보여질 목록의 행 수
this.total = total;// 753
this.currentPage = currentPage;// 1
this.content = content;
this.keyword = keyword;
System.out.println("ArticlePage >> keyword : " + keyword);
// 전체글 수가 0이면?
if (total == 0) {
totalPages = 0;// 전체 페이지 수
startPage = 0;// 블록 시작번호
endPage = 0; // 블록 종료번호
} else {// 글이 있다면
// 전체 페이지 수 = 전체글 수 / 한 화면에 보여질 목록의 행 수
// 3 = 31 / 10
totalPages = total / size;// 75
// 나머지가 있다면, 페이지를 1 증가
if (total % size > 0) {// 나머지3
totalPages++;// 76
}
// 페이지 블록 시작번호를 구하는 공식
// 블록시작번호 = 현재페이지 / 페이지크기 * 페이지크기 + 1
startPage = currentPage / 5 * 5 + 1;// 1
// 현재페이지 % 페이지크기 => 0일 때 보정
if (currentPage % 5 == 0) {
startPage -= 5;
}
// 블록종료번호 = 시작페이지번호 + (페이지크기 - 1)
// [1][2][3][4][5][다음]
endPage = startPage + (5 - 1);// 5
// 종료페이지번호 > 전체페이지수
if (endPage > totalPages) {
endPage = totalPages;
}
}
pagingArea += "<div class='col-sm-12 col-md-7'>";
pagingArea += "<div class='dataTables_paginate paging_simple_numbers' id='example2_paginate'>";
pagingArea += "<ul class='pagination'>";
pagingArea += "<li class='paginate_button page-item previous ";
if (this.startPage < 6) {
pagingArea += "disabled ";
}
pagingArea += "'";
pagingArea += "id='example2_previous'>";
pagingArea += "<a href='#' onclick=\"getList('" + this.keyword + "', " + (this.startPage - 5)
+ ")\" aria-controls='example2' data-dt-idx='0' tabindex='0' ";
pagingArea += "class='page-link'><<</a></li>";
for (int pNo = this.startPage; pNo <= this.endPage; pNo++) {
pagingArea += "<li class='paginate_button page-item ";
if (this.currentPage == pNo) {
pagingArea += "active";
}
pagingArea += "'>";
pagingArea += "<a href='#' onclick=\"getList('" + this.keyword + "', " + pNo
+ ")\" aria-controls='example2' data-dt-idx='1' tabindex='0' ";
pagingArea += "class='page-link'>" + pNo + "</a>";
pagingArea += "</li>";
}
pagingArea += "<li class='paginate_button page-item next ";
if (this.endPage >= this.totalPages) {
pagingArea += "disabled";
}
pagingArea += "' id='example2_next'><a ";
pagingArea += "href='#' onclick=\"getList('" + this.keyword + "', " + (this.startPage + 5)
+ ")\" aria-controls='example2' data-dt-idx='7' ";
pagingArea += "tabindex='0' class='page-link'>>></a></li>";
pagingArea += "</ul>";
pagingArea += "</div>";
pagingArea += "</div>";
}// end 구분 없는 ajax 생성자
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public String getKeyword() {
return keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
public String getQueGubun() {
return queGubun;
}
public void setQueGubun(String queGubun) {
this.queGubun = queGubun;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public List<T> getContent() {
return content;
}
public void setContent(List<T> content) {
this.content = content;
}
//전체 글의 수가 0인가?
public boolean hasNoArticles() {
return this.total == 0;
}
//데이터가 있나?
public boolean hasArticles() {
return this.total > 0;
}
public void setPagingArea(String pagingArea) {
this.pagingArea = pagingArea;
}
//페이징 블록을 자동화
public String getPagingArea() {
return this.pagingArea;
}
}
volunteer.vo
package kr.or.ddit.vo;
import java.sql.Date;
import java.text.SimpleDateFormat;
import org.springframework.web.multipart.MultipartFile;
import kr.or.ddit.util.Defind;
import lombok.Data;
/**
* @author PC-11
* 봉사활동 VO
*/
@Data
public class VolunteerVO {
private int rowNum; // 게시판 번호
private String volNo; // 활동번호
private String volPlace; // 봉사장소
private Date volStart; // 봉사시작날짜
private Date volEnd; // 봉사종료날짜
private int volTime; // 봉사시간
private String volCon; // 봉사내역
private String volFileStr; // 첨부파일ID
private String volFileName; // 첨부파일이름
private MultipartFile vonFile; // 첨부파일
public String getVolStartDisplay() {
String result = "";
if(volStart != null) {
result = new SimpleDateFormat(Defind.DATE_PATTERN).format(volStart);
}
return result;
}
public String getVolEndDisplay() {
String result = "";
if(volEnd != null) {
result = new SimpleDateFormat(Defind.DATE_PATTERN).format(volEnd);
}
return result;
}
public String getVolConDisplay() {
String result = "";
int volConLength = volCon.length();
if(volCon == null || volConLength <=Defind.substringEnd ) {
return volCon;
}
result =volCon.substring(0,Defind.substringEnd)+"...";
return result;
}
}
'JAVA > 대덕인재대학교-최프' 카테고리의 다른 글
봉사활동 카카오톡api (1) | 2024.10.10 |
---|---|
환경설정 - servlet-context.xml : 스프링 웹(view) 설정 파일 (0) | 2024.09.23 |
환경설정 - root.context.xml : 스프링 설정 파일 (1) | 2024.09.09 |
환경설정 - web.xml : tomcat 서버의 설정 (1) | 2024.09.08 |
환경설정 - pom.xml (0) | 2024.09.08 |