* 해당 메소드 ctrl + 좌클릭 하면 그 메소드 있는 곳으로 자동 이동됨(servlet 에서 했다면 DAO 로 넘어감)
총 게시물 수
1. MemberList.java
1.
int count = dao.getAllCount(); // 총 게시물 수
3.
request.setAttribute("count", count); // (내가 지정한 변수명, 변수) count라는 변수에 count 값을 담겠다
2. MemberDAO.java
2.
// 총 게시물 수
public int getAllCount() {
d.getCon(); //DB 연결
int num=0; // 전역변수 선언
try {
String sql = "select count(*) from member4";
pstmt = d.con.prepareStatement(sql);
rs = pstmt.executeQuery();
if(rs.next()) {
num = rs.getInt(1); // 첫번째 칼럼을 전역변수 num에 전달
}
rs.close();
pstmt.close();
d.con.close();
} catch (Exception e) {
e.printStackTrace();
}
return num; //int이므로 리턴값 필요
}
3. list.jsp
4.
<td>Total : ${count }</td> // 보여지게 구현
결과 : 회원목록에 Total : 8 뜸
페이징 처리
1. MemberList.java --> 메소드에 (변수) 담았다면
* limit : 지정한 개수만큼 레코드 출력 (ex) limit(1,10) : 1~10까지만 출력
1.
//get 방식으로 넘어온 값(설정값)
int pageSize = 10; // 한페이지당 출력할 게시물 수
int pageNum = 1; // 현재페이지 값(default) else담당
if(request.getParameter("pageNum") != null) { // 첫페이지가 아니라면
pageNum = Integer.parseInt(request.getParameter("pageNum")); // 넘어온 값을 int로 형변환
}
2.
// 넘버링 (request로 forward 시킴)
int number = count - (pageNum-1) * pageSize; // 총게시물 수 - (현재페이지 값 -1) * 출력게시물수
3.
request.setAttribute("number", number); // 값 담기
5.
// limit 첫번째 항목 처리
int startRow = (pageNum - 1) * pageSize; //시작
int endRow = pageSize; // 끝
ArrayList<Member> list = dao.listMember(startRow,endRow);
2. MemberDAO.java --> 여기에서도 같은 메소드에 (자료형 + 변수) 담기
6.
public ArrayList<Member> listMember(int startRow, int endRow) {
String sql = "select * from member4 where (1) limit startRow,endRow";
또는
String sql = "select * from member4 where (1) limit ?,?";
pstmt.setInt(1, startRow);
pstmt.setInt(2, endRow);
3. list.jsp --> jsp2 198번
* 전페이지에서 넘길 값이 있다면 <페이징 링크> a 태그에 ?변수명=변수 추가할 것!!!!!!!!!!!(검색 참고)
4. while문에 추가
<c:set var ="number" value="${number}"/> <!-- 전역변수 -->
<td>${number}</td>
<c:set var ="number" value="${number - 1}"/> <!-- 지역변수 -->
// jsp 와 동일(이해를 위한 예시 -- 지워야 오류 안생김)
<%
int number = 12;
while(number >2 ){
out.print(number);
number --;
}
%>
7.
<!-- 페이징처리 -->
<table width=400 border=0 align=center>
<tr>
<td align=center>
<c:if test="${count>0 }">
<c:set var="pageCount" value="${count / pageSize + (count % pageSize == 0 ? 0 : 1) }" />
<fmt:parseNumber var="pageCount" value="${pageCount }" integerOnly="true" />
<!-- fmt:parseNumber : 문자열을 숫자로 변환해 주는 기능을 제공하는 태그 -->
<!-- integerOnly : true , false 정수만 출력할 것인지를 묻는 속성 -->
<!-- 2개의 변수 초기화 -->
<c:set var="startPage" value="${1 }" />
<c:set var="pageBlock" value="${3 }" />
<!-- 다음 페이지 블럭이 존재 할 경우 startPage 값 변경 부분-->
<c:if test="${pageNum > pageBlock }">
<!-- 결과를 정수형으로 리턴 받아야 하기 대문에 fmt -->
<fmt:parseNumber var="result" value="${pageNum / pageBlock - (pageNum % pageBlock == 0 ? 1:0) }" integerOnly="true"/>
<c:set var="startPage" value="${result * pageBlock + 1 }" />
</c:if>
<!-- endPage 값 설정 부분 -->
<c:set var="endPage" value="${startPage + pageBlock - 1 }" />
<c:if test="${endPage > pageCount }">
<c:set var="endPage" value="${pageCount }" />
</c:if>
<!-- 이전 링크 -->
<c:if test="${startPage > pageBlock }">
<a href="list?pageNum=${startPage - pageBlock }">[이전] </a>
</c:if>
<!-- 페이징 링크 (a태그에 넘길 값 있다면 ?변수명=변수&변수명=변수 추가하기) -->
<c:forEach var="i" begin="${startPage }" end="${endPage }">
<c:choose>
<c:when test="${pageNum == i }">
<a href="list?pageNum=${i }"><span style="padding:0px 4px;"><font color=red><b>[${i }]</b></font></span></a>
</c:when>
<c:otherwise>
<a href="list?pageNum=${i }"><span style="padding:0px 4px;">[${i }]</span></a>
</c:otherwise>
</c:choose>
</c:forEach>
<!-- 다음 링크 -->
<c:if test="${endPage < pageCount }">
<a href="list?pageNum=${startPage + pageBlock }">[다음] </a>
</c:if>
</c:if>
</td>
</tr>
</table>
검색창
1. list.jsp
--> 검색했던 option, input 고정시키기! (if문, value 사용)
1.
<!-- 검색창 -->
<form method="get">
<table width=600 border=0 align=center>
<tr>
<td>
<select name="field">
<option value="id" <c:if test="${field == 'id' }">selected</c:if>>아이디</option>
<option value="name" <c:if test="${field == 'name' }">selected</c:if>>이름</option>
</select>
<input name="search" value="${search }">
<button>검색</button>
</td>
</tr>
</table>
</form>
9. ?변수명=값 추가하기
<!-- 페이징 링크 -->
<c:forEach var="i" begin="${startPage }" end="${endPage }">
<c:choose>
<c:when test="${pageNum == i }">
<a href="list?pageNum=${i }&field=${field}&search=${search}"><span style="padding:0px 4px;"><font color=red><b>[${i }]</b></font></span></a>
</c:when>
<c:otherwise>
<a href="list?pageNum=${i }&field=${field}&search=${search}"><span style="padding:0px 4px;">[${i }]</span></a>
</c:otherwise>
</c:choose>
</c:forEach>
2. MemberList.java
2.
// 검색어(ksp에서 넘긴 변수 두개 가져오기)
String field = request.getParameter("field");
String search = request.getParameter("search");
3.
request.setAttribute("field", field); // 검색했던 거 고정하려면
request.setAttribute("search", search); // 검색했던 거 고정하려면
4.
ArrayList<Member> list = dao.listMember(startRow,endRow,field,search);
7.
int count = dao.getAllCount(field,search); // 총 게시물 수(검색 반영시키기 위해)
3. MemberDAO.java
--> like : 포함된 글자 검색
--> 동일한 값만을 원한다면 == 쓰기
5.
public ArrayList<Member> listMember(int startRow, int endRow, String field, String search) {
6.
//System.out.println("===search : "+search);
// 검색어에 해당하는 것들만 보여주기(목록처리)
String str = ""; // 전역변수(else 영역)
if(search != null) { // 검색어가 있다면
str = " and "+field+" like '%"+search+"%' "; //
}
try {
String sql = "select * from member4 where (1) "+str+" limit ?,?"; //목록처리 sql문에 추가하기
8.
public int getAllCount(String field, String search) {
// 검색어에 해당하는 것들만 보여주기(게시물 수)
String str = ""; // 전역변수(else 영역)
if(search != null) { // 검색어가 있다면
str = " and "+field+" like '%"+search+"%' "; //
}
try {
String sql = "select count(*) from member4 where (1) "+str+" ";
'JAVA > model2' 카테고리의 다른 글
230302_JQuery (0) | 2023.03.02 |
---|---|
230228_web2(5)-첨부파일 (0) | 2023.02.28 |
230227_web2(3) admin (0) | 2023.02.27 |
230224 _ EL -- 연산, 피라미드 (1) | 2023.02.24 |
230223 _ Scope, parameter vs attribute, 쿠키, pstmt (0) | 2023.02.23 |