데일리로그C:
article thumbnail
Published 2023. 2. 28. 11:02
230228_web2(4)-회원목록 JAVA/model2

* 해당 메소드 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
profile

데일리로그C:

@망밍

포스팅이 도움됐다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...