728x90
중복확인을 조금 더 안정적으로 하기 위해서
AjaxController
package com.itwillbs.controller;
import javax.inject.Inject;
import javax.servlet.http.HttpServletResponse;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.itwillbs.domain.MemberDTO;
import com.itwillbs.service.MemberService;
@RestController
public class AjaxController {
@Inject
private MemberService memberService;
@GetMapping("/member/idCheck")
public ResponseEntity<String> idCheck(MemberDTO memberDTO, HttpServletResponse response) {
System.out.println("MemberController idCheck()");
System.out.println(memberDTO);
MemberDTO memberDTO1 = memberService.getMember(memberDTO.getId());
System.out.println(memberDTO1);
//아이디가 있으면 memberDTO1 주소값 전달 => 아이디 중복
//아이디가 없으면 memberDTO1 null 전달 => 아이디 사용가능
String result ="";
if(memberDTO1 != null) {
//아이디 중복
//result = "사용 불가능한 아이디입니다.";
result = "iddup";
}else {
result = "idok";
//result = "사용 가능한 아이디입니다.";
}
System.out.println(result);
// 원래 return 이동할 주소 => ajax 처리 return 출력 결과 리턴 => 출력 결과 응답 (어노테이션@ResponseBody)
// 출력 결과를 가지고 join.jsp 이동(안정적으로 되돌아감) => ResponseEntity
ResponseEntity<String> entity = new ResponseEntity<String>(result, HttpStatus.OK);
return entity;
}
}
메인 페이지에 최근 글 보이기
json설치
pom.xml
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
<!-- 데이터를 json형태로 변경하는 프로그램 jackson-databind 끝 -->
main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="${pageContext.request.contextPath}/resources/css/default.css" rel="stylesheet" type="text/css">
<link href="${pageContext.request.contextPath}/resources/css/front.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" type="text/javascript"></script>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/ie7-squish.js" type="text/javascript"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
<![endif]-->
<!--[if IE 6]>
<script src="../script/DD_belatedPNG_0.0.8a.js"></script>
<script>
/* EXAMPLE */
DD_belatedPNG.fix('#wrap');
DD_belatedPNG.fix('#main_img');
</script>
<![endif]-->
<script src="${pageContext.request.contextPath}/resources/script/jquery-3.7.1.min.js"></script>
</head>
<body>
<div id="wrap">
<!-- 헤더파일들어가는 곳 -->
<jsp:include page="../inc/top.jsp" />
<!-- 헤더파일들어가는 곳 -->
<!-- 메인이미지 들어가는곳 -->
<div class="clear"></div>
<div id="main_img"><img src="${pageContext.request.contextPath}/resources/images/main_img.jpg"
width="971" height="282"></div>
<!-- 메인이미지 들어가는곳 -->
<!-- 메인 콘텐츠 들어가는 곳 -->
<article id="front">
<div id="solution">
<div id="hosting">
<h3>Web Hosting Solution</h3>
<p>Lorem impsun Lorem impsunLorem impsunLorem
impsunLorem impsunLorem impsunLorem impsunLorem
impsunLorem impsunLorem impsun....</p>
</div>
<div id="security">
<h3>Web Security Solution</h3>
<p>Lorem impsun Lorem impsunLorem impsunLorem
impsunLorem impsunLorem impsunLorem impsunLorem
impsunLorem impsunLorem impsun....</p>
</div>
<div id="payment">
<h3>Web Payment Solution</h3>
<p>Lorem impsun Lorem impsunLorem impsunLorem
impsunLorem impsunLorem impsunLorem impsunLorem
impsunLorem impsunLorem impsun....</p>
</div>
</div>
<div class="clear"></div>
<div id="sec_news">
<h3><span class="orange">Security</span> News</h3>
<dl>
<dt>Vivamus id ligula....</dt>
<dd>Proin quis ante Proin quis anteProin
quis anteProin quis anteProin quis anteProin
quis ante......</dd>
</dl>
<dl>
<dt>Vivamus id ligula....</dt>
<dd>Proin quis ante Proin quis anteProin
quis anteProin quis anteProin quis anteProin
quis ante......</dd>
</dl>
</div>
<div id="news_notice">
<h3 class="brown">News & Notice</h3>
<table>
<tr><td class="contxt"><a href="#">Vivans....</a></td>
<td>2012.11.02</td></tr>
<tr><td class="contxt"><a href="#">Vivans....</a></td>
<td>2012.11.02</td></tr>
<tr><td class="contxt"><a href="#">Vivans....</a></td>
<td>2012.11.02</td></tr>
<tr><td class="contxt"><a href="#">Vivans....</a></td>
<td>2012.11.02</td></tr>
<tr><td class="contxt"><a href="#">Vivans....</a></td>
<td>2012.11.02</td></tr>
</table>
</div>
</article>
<!-- 메인 콘텐츠 들어가는 곳 -->
<div class="clear"></div>
<!-- 푸터 들어가는 곳 -->
<jsp:include page="../inc/bottom.jsp" />
<!-- 푸터 들어가는 곳 -->
</div>
<!--
dataType: 'json' => 데이터 리턴타입 종류
xml(eXtensible Markup Language)형태 : 확장된 마크업 언어, 사용자가 정의하는 태그 사용
ex) <member>
<person><id>abc</id><pw>123</pw><name>태조</name></person>
<person><id>bcd</id><pw>456</pw><name>정조</name></person>
<person><id>cde</id><pw>789</pw><name>태종</name></person>
</member>
json(JavaScript Object Notation)형태 : 자바스크립트 객체(배열) 속성,값의 쌍 형태로 데이터 표현,
웹과 컴퓨터 프로그램에서 용량이 적은 데이터를 교환하기 위해 데이터 객체 속성 값의 쌍 형태로 표현하는 형식
ex) [
{"id" : "abc", "pw" : "123", "name" : "태조"},
{"id" : "bcd", "pw" : "456", "name" : "정조"},
{"id" : "cde", "pw" : "789", "name" : "태종"},
]
-->
<script type="text/javascript">
$(function(){
//class="brown"을 클릭했을 때
$('.brown').click(function(){
//alert('클릭');
$.ajax({
//type : 'get', type은 기본적으로(작성하지 않으면) get방식
url : '${pageContext.request.contextPath}/board/listjson',
dataType: 'json',
success : function(result){
alert(result);
}
});//ajax
});//$('.brown')
});//$(function()
</script>
</body>
</html>
BoardController
//http://localhost:8080/funweb/board/listjson
@GetMapping("/listjson")
@ResponseBody
public List<BoardDTO> listjson() {
System.out.println("BoardController listjson()");
//최근 글 5개
//한 화면에 보여줄 글 개수 5개
int pageSize = 5;
//현 페이지 1페이지 설정
int currentPage = 1;
//PageDTO 저장
PageDTO pageDTO = new PageDTO();
pageDTO.setPageSize(pageSize);
pageDTO.setCurrentPage(currentPage);
List<BoardDTO> boardList = boardService.getBoardList(pageDTO);
return boardList;
}
AjaxController
@Inject
private BoardService boardService;
@GetMapping("/board/listjson")
public List<BoardDTO> listjson() {
System.out.println("AjaxController listjson()");
//최근 글 5개
//한 화면에 보여줄 글 개수 5개
int pageSize = 5;
//현 페이지 1페이지 설정
int currentPage = 1;
//PageDTO 저장
PageDTO pageDTO = new PageDTO();
pageDTO.setPageSize(pageSize);
pageDTO.setCurrentPage(currentPage);
List<BoardDTO> boardList = boardService.getBoardList(pageDTO);
return boardList;
}
안정적으로 변경
@GetMapping("/board/listjson")
public ResponseEntity<List<BoardDTO>> listjson() {
System.out.println("AjaxController listjson()");
//최근 글 5개
//한 화면에 보여줄 글 개수 5개
int pageSize = 5;
//현 페이지 1페이지 설정
int currentPage = 1;
//PageDTO 저장
PageDTO pageDTO = new PageDTO();
pageDTO.setPageSize(pageSize);
pageDTO.setCurrentPage(currentPage);
List<BoardDTO> boardList = boardService.getBoardList(pageDTO);
ResponseEntity<List<BoardDTO>> entity = new ResponseEntity<List<BoardDTO>>(boardList, HttpStatus.OK);
return entity;
}
main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="${pageContext.request.contextPath}/resources/css/default.css" rel="stylesheet" type="text/css">
<link href="${pageContext.request.contextPath}/resources/css/front.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" type="text/javascript"></script>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/ie7-squish.js" type="text/javascript"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
<![endif]-->
<!--[if IE 6]>
<script src="../script/DD_belatedPNG_0.0.8a.js"></script>
<script>
/* EXAMPLE */
DD_belatedPNG.fix('#wrap');
DD_belatedPNG.fix('#main_img');
</script>
<![endif]-->
<script src="${pageContext.request.contextPath}/resources/script/jquery-3.7.1.min.js"></script>
</head>
<body>
<div id="wrap">
<!-- 헤더파일들어가는 곳 -->
<jsp:include page="../inc/top.jsp" />
<!-- 헤더파일들어가는 곳 -->
<!-- 메인이미지 들어가는곳 -->
<div class="clear"></div>
<div id="main_img"><img src="${pageContext.request.contextPath}/resources/images/main_img.jpg"
width="971" height="282"></div>
<!-- 메인이미지 들어가는곳 -->
<!-- 메인 콘텐츠 들어가는 곳 -->
<article id="front">
<div id="solution">
<div id="hosting">
<h3>Web Hosting Solution</h3>
<p>Lorem impsun Lorem impsunLorem impsunLorem
impsunLorem impsunLorem impsunLorem impsunLorem
impsunLorem impsunLorem impsun....</p>
</div>
<div id="security">
<h3>Web Security Solution</h3>
<p>Lorem impsun Lorem impsunLorem impsunLorem
impsunLorem impsunLorem impsunLorem impsunLorem
impsunLorem impsunLorem impsun....</p>
</div>
<div id="payment">
<h3>Web Payment Solution</h3>
<p>Lorem impsun Lorem impsunLorem impsunLorem
impsunLorem impsunLorem impsunLorem impsunLorem
impsunLorem impsunLorem impsun....</p>
</div>
</div>
<div class="clear"></div>
<div id="sec_news">
<h3><span class="orange">Security</span> News</h3>
<dl>
<dt>Vivamus id ligula....</dt>
<dd>Proin quis ante Proin quis anteProin
quis anteProin quis anteProin quis anteProin
quis ante......</dd>
</dl>
<dl>
<dt>Vivamus id ligula....</dt>
<dd>Proin quis ante Proin quis anteProin
quis anteProin quis anteProin quis anteProin
quis ante......</dd>
</dl>
</div>
<div id="news_notice">
<h3 class="brown">News & Notice</h3>
<table>
<!-- <tr><td class="contxt"><a href="#">Vivans....</a></td> -->
<!-- <td>2012.11.02</td></tr> -->
<!-- <tr><td class="contxt"><a href="#">Vivans....</a></td> -->
<!-- <td>2012.11.02</td></tr> -->
<!-- <tr><td class="contxt"><a href="#">Vivans....</a></td> -->
<!-- <td>2012.11.02</td></tr> -->
<!-- <tr><td class="contxt"><a href="#">Vivans....</a></td> -->
<!-- <td>2012.11.02</td></tr> -->
<!-- <tr><td class="contxt"><a href="#">Vivans....</a></td> -->
<!-- <td>2012.11.02</td></tr> -->
</table>
</div>
</article>
<!-- 메인 콘텐츠 들어가는 곳 -->
<div class="clear"></div>
<!-- 푸터 들어가는 곳 -->
<jsp:include page="../inc/bottom.jsp" />
<!-- 푸터 들어가는 곳 -->
</div>
<!--
dataType: 'json' => 데이터 리턴타입 종류
xml(eXtensible Markup Language)형태 : 확장된 마크업 언어, 사용자가 정의하는 태그 사용
ex) <member>
<person><id>abc</id><pw>123</pw><name>태조</name></person>
<person><id>bcd</id><pw>456</pw><name>정조</name></person>
<person><id>cde</id><pw>789</pw><name>태종</name></person>
</member>
json(JavaScript Object Notation)형태 : 자바스크립트 객체(배열) 속성,값의 쌍 형태로 데이터 표현,
웹과 컴퓨터 프로그램에서 용량이 적은 데이터를 교환하기 위해 데이터 객체 속성 값의 쌍 형태로 표현하는 형식
ex) [
{"id" : "abc", "pw" : "123", "name" : "태조"},
{"id" : "bcd", "pw" : "456", "name" : "정조"},
{"id" : "cde", "pw" : "789", "name" : "태종"},
]
-->
<script type="text/javascript">
$(function(){
//class="brown"을 클릭했을 때
$('.brown').click(function(){
//alert('클릭');
//table 화면 초기화
$('table').html('');
$.ajax({
//type : 'get', type은 기본적으로(작성하지 않으면) get방식
url : '${pageContext.request.contextPath}/board/listjson',
dataType: 'json',
success : function(result){
//alert(result);
//[object Object],[object Object],[object Object],[object Object],[object Object]
//json => 자바스크립트 배열 => 반복문을 이용한 접근 => 출력
//$.each(배열 대상, 접근(function));
//.each() 반복문, result 배열변수, index 배열접근 순서값, item 배열의 하나의 값, 한칸의 배열내용을 저장
$.each(result,function(index, item){
//alert(index);
//tiem.키 이름 접근
//alert(item.subject);
//.html() => table 대상에 html 내용을 넣음. 기존 내용은 사라짐
//$('table').html('<tr><td class="contxt"><a href="#">'+item.subject+'</a></td><td>'+item.date+'</td></tr>');
//.append() => table 대상에 내용 뒷부분에 추가해서 넣음. 기존 내용은 유지
//item.date 숫자 => 날짜 변경
var date = new Date(item.date);
var d = date.getFullYear() +"."+ (date.getMonth()+1) +"."+ date.getDate();
$('table').append('<tr><td class="contxt"><a href="#">'+item.subject+'</a></td><td>'+d+'</td></tr>');
});//$.each
}//function(result)
});//ajax
//이벤트 중지 => 클릭한 이벤트 자기자신 this => unbind()
//$(this).unbind();
//$('.brown').off('click');
});//$('.brown')
});//$(function()
</script>
</body>
</html>
json은 반복문으로 접근해야한다.
게시판 검색
notice.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <!-- => 날짜 모양 변경 태그 라이브러리 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>center/notice.jsp</title>
<link href="${pageContext.request.contextPath}/resources/css/default.css" rel="stylesheet" type="text/css">
<link href="${pageContext.request.contextPath}/resources/css/subpage.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" type="text/javascript"></script>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/ie7-squish.js" type="text/javascript"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
<![endif]-->
<!--[if IE 6]>
<script src="../script/DD_belatedPNG_0.0.8a.js"></script>
<script>
/* EXAMPLE */
DD_belatedPNG.fix('#wrap');
DD_belatedPNG.fix('#main_img');
</script>
<![endif]-->
</head>
<body>
<div id="wrap">
<!-- 헤더들어가는 곳 -->
<jsp:include page="../inc/top.jsp" />
<!-- 헤더들어가는 곳 -->
<!-- 본문들어가는 곳 -->
<!-- 메인이미지 -->
<div id="sub_img_center"></div>
<!-- 메인이미지 -->
<!-- 왼쪽메뉴 -->
<jsp:include page="../inc/left.jsp" />
<!-- 왼쪽메뉴 -->
<!-- 게시판 -->
<article>
<h1>Notice [전체 글의 개수 ${pageDTO.count }]</h1>
<table id="notice">
<tr><th class="tno">No.</th>
<th class="ttitle">Title</th>
<th class="twrite">Writer</th>
<th class="tdate">Date</th>
<th class="tread">Read</th></tr>
<c:forEach var="boardDTO" items="${boardList}">
<tr onclick="location.href='${pageContext.request.contextPath}/board/content?num=${boardDTO.num}'">
<td>${boardDTO.num}</td>
<td class="left">${boardDTO.subject}</td>
<td>${boardDTO.name}</td>
<td><fmt:formatDate value="${boardDTO.date}" pattern="yyyy-MM-dd"/></td>
<td>${boardDTO.readcount}</td></tr>
</c:forEach>
</table>
<!-- 로그인을 하지 않으면 글쓰기 버튼이 보이지 않게 설정 -->
<c:if test="${!empty sessionScope.id }">
<div id="table_search">
<!-- location 자바스크립트 내장 객체 => 웹 브라우저 주소줄을 객체로 정의
location 내장객체 멤버 변수 => href 변수 : 웹 브라우저 주소줄 내용을 저장하고 있는 변수
=> href 변수 내용이 변경되어지면 웹 브라우저 주소도 변경
location.href='${pageContext.request.contextPath}/board/write -->
<input type="button" value="글쓰기" class="btn" onclick="location.href='${pageContext.request.contextPath}/board/write'">
</div>
</c:if>
<div id="table_search">
<form action="${pageContext.request.contextPath}/board/list" method="get">
<input type="text" name="search" class="input_box">
<input type="button" value="search" class="btn">
</form>
</div>
<div class="clear"></div>
<div id="page_control">
<c:if test="${pageDTO.startPage > pageDTO.pageBlock }">
<a href="${pageContext.request.contextPath}/board/list?pageNum=${pageDTO.startPage - pageDTO.pageBlock}">Prev</a>
</c:if>
<c:forEach var="i" begin="${pageDTO.startPage }" end="${pageDTO.endPage }" step="1">
<a href="${pageContext.request.contextPath}/board/list?pageNum=${i}">${i}</a>
</c:forEach>
<c:if test="${pageDTO.endPage < pageDTO.pageCount}">
<a href="${pageContext.request.contextPath}/board/list?pageNum=${pageDTO.startPage + pageDTO.pageBlock}">Next</a>
</c:if>
</div>
</article>
<!-- 게시판 -->
<!-- 본문들어가는 곳 -->
<div class="clear"></div>
<!-- 푸터들어가는 곳 -->
<jsp:include page="../inc/bottom.jsp" />
<!-- 푸터들어가는 곳 -->
</div>
</body>
</html>
PageDTO
//검색어 추가
private String search;
public String getSearch() {
return search;
}
public void setSearch(String search) {
this.search = search;
}
BoardController
@GetMapping("/list")
public String list(HttpServletRequest request, PageDTO pageDTO, Model model) {
System.out.println("BoardController list()");
//검색어 가져오기
String search = request.getParameter("search");
// 한 화면에 보여줄 글의 개수 설정
int pageSize = 15;
// pageNum에 파라미터 값을 가져오기
String pageNum = request.getParameter("pageNum"); //request에서 값을 받아옴
// pageNum값이 없으면 1로 설정
if(pageNum == null) {
pageNum = "1";
}
//pageNum => 정수형 변경
int currentPage = Integer.parseInt(pageNum);
//pageDTO에 저장
pageDTO.setPageSize(pageSize);
pageDTO.setPageNum(pageNum);
pageDTO.setCurrentPage(currentPage);
//검색어 추가
pageDTO.setSearch(search);
List<BoardDTO> boardList = boardService.getBoardList(pageDTO);
//페이징 작업
//전체 글의 개수 구하기 int count = getBoardCount(pageDTO) 검색어 포함
int count = boardService.getBoardCount(pageDTO);
//한 화면에 보여줄 페이지 개수 설정
int pageBlock = 10;
//한 화면에 보여줄 시작 페이지 구하기
//1~10 => 1, 11~20 => 11,..
int startPage = (currentPage-1)/pageBlock*pageBlock+1;
//한 화면에 보여줄 끝 페이지 구하기
int endPage = startPage + pageBlock -1;
//전체 페이지 개수 구하기
int pageCount = count / pageSize + (count%pageSize == 0 ? 0 : 1);
if(endPage > pageCount) {
endPage = pageCount; //끝 페이지, 전체 페이지 수를 비교해서 => 끝 페이지가 크면 전체 페이지 수로 끝 페이지 변경
}
//pageDTO 저장
pageDTO.setCount(count); //[전체 글의 개수 ${pageDTO.count }]
pageDTO.setPageBlock(pageBlock);
pageDTO.setStartPage(startPage);
pageDTO.setEndPage(endPage);
pageDTO.setPageCount(pageCount);
//model 저장
model.addAttribute("pageDTO", pageDTO);
model.addAttribute("boardList", boardList);
// center/notice.jsp 주소변경없이 이동
return "center/notice";
//오류 발생
@GetMapping("/flist")
public String flist(HttpServletRequest request, PageDTO pageDTO, Model model) {
System.out.println("BoardController flist()");
// 한 화면에 보여줄 글의 개수 설정
int pageSize = 15;
// pageNum에 파라미터 값을 가져오기
String pageNum = request.getParameter("pageNum"); //request에서 값을 받아옴
// pageNum값이 없으면 1로 설정
if(pageNum == null) {
pageNum = "1";
}
//pageNum => 정수형 변경
int currentPage = Integer.parseInt(pageNum);
//pageDTO에 저장
pageDTO.setPageSize(pageSize);
pageDTO.setPageNum(pageNum);
pageDTO.setCurrentPage(currentPage);
List<BoardDTO> boardList = boardService.getBoardList(pageDTO);
//페이징 작업
//전체 글의 개수 구하기 int count = getBoardCount()
int count = boardService.getBoardCount(pageDTO);
//한 화면에 보여줄 페이지 개수 설정
int pageBlock = 10;
//한 화면에 보여줄 시작 페이지 구하기
//1~10 => 1, 11~20 => 11,..
int startPage = (currentPage-1)/pageBlock*pageBlock+1;
//한 화면에 보여줄 끝 페이지 구하기
int endPage = startPage + pageBlock -1;
//전체 페이지 개수 구하기
int pageCount = count / pageSize + (count%pageSize == 0 ? 0 : 1);
if(endPage > pageCount) {
endPage = pageCount; //끝 페이지, 전체 페이지 수를 비교해서 => 끝 페이지가 크면 전체 페이지 수로 끝 페이지 변경
}
//pageDTO 저장
pageDTO.setCount(count); //[전체 글의 개수 ${pageDTO.count }]
pageDTO.setPageBlock(pageBlock);
pageDTO.setStartPage(startPage);
pageDTO.setEndPage(endPage);
pageDTO.setPageCount(pageCount);
//model 저장
model.addAttribute("pageDTO", pageDTO);
model.addAttribute("boardList", boardList);
// center/fnotice.jsp 주소변경없이 이동
return "center/fnotice";
}
BoardService
public int getBoardCount(PageDTO pageDTO) {
System.out.println("BoardService getBoardCount()");
return boardDAO.getBoardCount(pageDTO);
}
boardMapper
<!-- %검색어% 검색어 포함
concat() 문자열 합치기 mysql 함수
동적SQL 검색어가 null이 아니면
<if test="search != null">
where subject like concat('%','#{search}','%')
</if>
-->
<select id="getBoardList" resultType="com.itwillbs.domain.BoardDTO">
select * from board
<if test="search !=null">
where subject like CONCAT('%',#{search},'%')
</if>
order by num desc
limit #{startRow},#{pageSize}
<!-- where 시작행 - 1, 개수 db에서 -1을 할 수 없기 때문에 BoardService에서 작업-->
</select>
<!-- 검색어 포함 -->
<select id="getBoardCount" resultType="java.lang.Integer">
select count(*)
from board
<if test="search !=null">
where subject like CONCAT('%',#{search},'%');
</if>
</select>
notice.jsp
<div class="clear"></div>
<div id="page_control">
<c:if test="${pageDTO.startPage > pageDTO.pageBlock }">
<a href="${pageContext.request.contextPath}/board/list?pageNum=${pageDTO.startPage - pageDTO.pageBlock}&search=${pageDTO.search}">Prev</a>
</c:if>
<c:forEach var="i" begin="${pageDTO.startPage }" end="${pageDTO.endPage }" step="1">
<a href="${pageContext.request.contextPath}/board/list?pageNum=${i}&search=${pageDTO.search}">${i}</a>
</c:forEach>
<c:if test="${pageDTO.endPage < pageDTO.pageCount}">
<a href="${pageContext.request.contextPath}/board/list?pageNum=${pageDTO.startPage + pageDTO.pageBlock}&search=${pageDTO.search}">Next</a>
</c:if>
728x90
'KDT > WEB' 카테고리의 다른 글
240227 WEB - Map (0) | 2024.02.27 |
---|---|
240223 WEB 댓글,대댓글 (0) | 2024.02.23 |
240219 WEB - 파일 업로드2, 갤러리 게시판, AJAX를 이용한 중복확인 (0) | 2024.02.19 |
240215 WEB - 글 수정, 삭제, 파일 업로드 1 (0) | 2024.02.15 |
240213 WEB(펀웹5) (0) | 2024.02.13 |