YeaLow
article thumbnail

๐Ÿค๊ธ€์“ฐ๊ธฐ ๊ตฌํ˜„ํ•˜๊ธฐ

 

1.BoardController ์ž‘์„ฑ

	//๊ธ€์“ฐ๊ธฐ
	@GetMapping("/board/saveForm")
	public String saveForm() {
		return "board/saveForm";
	}

 

2. saveForm.jsp ์ž‘์„ฑ

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@include file="../layout/header.jsp"%>

<div class="container">
	<form>
		<div class="form-group">
			<input type="text" class="form-control" placeholder="Enter title" id="title">
		</div>
		<div class="form-group">
			
			<textarea class="form-control summernote" rows="5" id="content"></textarea>
		</div>
	</form>
	<button id="btn-save" class="btn btn-primary">๊ธ€์“ฐ๊ธฐ ์™„๋ฃŒ</button>
</div>

<script>
      $('.summernote').summernote({
        tabsize: 2,
        height: 300
      });
</script>
<script src="/js/board.js"></script>
<%@include file="../layout/footer.jsp"%>

 

3. content ๋ถ€๋ถ„์€ summernote๋ฅผ ์ ์šฉํ–ˆ๋‹ค. (For Bootstrap4)

์ ์šฉํ•œ ๋ชจ์Šต

 

4. ๊ธ€์“ฐ๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ๊ธ€์ด ๋“ฑ๋ก๋˜๋„๋ก board.js ์ž‘์„ฑ

let index = {
	init: function() {
		$("#btn-save").on("click", () => {
			this.save();
		});
	},

	save: function() {
		//alert('user์˜ saveํ•จ์ˆ˜ ํ˜ธ์ถœ๋จ');
		let data = {
			title: $("#title").val(),
			content: $("#content").val()
		};

		$.ajax({
			//๊ธ€์“ฐ๊ธฐ ์ˆ˜ํ–‰ ์š”์ฒญ
			type: "POST",
			url: "/api/board",
			data: JSON.stringify(data),
			contentType: "application/json; charset=utf-8",
			dataType: "json"

		}).done(function(resp) {
			alert("๊ธ€์“ฐ๊ธฐ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
			//console.log(resp);
			location.href = "/";

		}).fail(function(error) {
			alert(JSON.stringify(error));
		});

	}
 }

 

5. BoardApiController ์ž‘์„ฑ

  • saveForm์—๋Š” title, content ๋ฐ์ดํ„ฐ๋งŒ ๋‹ด๊ฒจ์žˆ๊ธฐ ๋•Œ๋ฌธ์— principal์—์„œ user ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ด.
	@PostMapping("/api/board")
	public ResponseDto<Integer> save(@RequestBody Board board, @AuthenticationPrincipal PrincipalDetail principal) {
		boardService.๊ธ€์“ฐ๊ธฐ(board, principal.getUser());
		return new ResponseDto<Integer>(HttpStatus.OK.value(),1);
	}

 

6. BoardService ์ž‘์„ฑ

	@Transactional
	public void ๊ธ€์“ฐ๊ธฐ(Board board, User user) {	//title, content

		board.setCount(0);	//์กฐํšŒ์ˆ˜ ๊ฐ•์ œ๋กœ ๋„ฃ๊ธฐ
		board.setUser(user);
		boardRepository.save(board);
	}

 

7. ์‹คํ–‰ ํ™”๋ฉด

 

์ด๋ฏธ์ง€๋„ ์ž˜ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 


๐Ÿค๊ธ€ ๋ชฉ๋ก๋ณด๊ธฐ ๊ตฌํ˜„ํ•˜๊ธฐ

1. BoardApiController ์ž‘์„ฑ

	@GetMapping({"","/"})
	public String index(Model model, @PageableDefault(size = 3, sort = "id", direction = Direction.DESC) Pageable pageable) {
		
		model.addAttribute("boards", boardService.๊ธ€๋ชฉ๋ก(pageable));
		
		//WEB-INF/views/index.jsp
		return "Index";
	}

 

2. Index.jsp์— ๋ฐ์ดํ„ฐ ๋ฟŒ๋ฆฌ๊ธฐ

<c:forEach var="board" items="${boards.content }">
	<div class="card m-2">
		<div class="card-body">
			<h4 class="card-title">${board.title }</h4>
			<a href="/board/${board.id }" class="btn btn-primary">์ƒ์„ธ๋ณด๊ธฐ</a>
		</div>
	</div>

 

3. BoardService ์ž‘์„ฑ

@Transactional(readOnly = true)
	public Page<Board> ๊ธ€๋ชฉ๋ก(Pageable pageable) {
		
		return boardRepository.findAll(pageable);
	}

 

4. ๊ธ€๋ชฉ๋ก ํ™•์ธํ•˜๊ธฐ


๐Ÿค๊ธ€ ๋ชฉ๋ก ํŽ˜์ด์ง• ๊ตฌํ˜„ํ•˜๊ธฐ

 

1. ์ปจํŠธ๋กค๋Ÿฌ์— ํ•œ ํŽ˜์ด์ง€์— 3๊ฐœ์”ฉ ๋œจ๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋‘์—ˆ๋‹ค.

@PageableDefault(size = 3, sort = "id", direction = Direction.DESC) Pageable pageable

 

2. BoardService์˜ ๊ธ€๋ชฉ๋ก ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— Pageable์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

3. ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์˜ Pagination ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•œ๋‹ค.

 

4. Index.jsp์— ์ถ”๊ฐ€ํ•œ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ ํŽ˜์ด์ง€์ผ ๋•Œ์—๋Š” disabled์„ ์ ์šฉํ•˜์—ฌ ํด๋ฆญ์„ ๋น„ํ™œ์„ฑํ™”์‹œํ‚ค๊ณ 
  • ๊ทธ๋ ‡์ง€ ์•Š์„ ๋•Œ์—๋Š” disabled๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์Œ. (c:choose, c:when, c:otherwise)
  • ์ด์ „ ํŽ˜์ด์ง€ ์ด๋™์€ ?page=${boards.number-1}, ๋‹ค์Œ ํŽ˜์ด์ง€ ์ด๋™์€ ?page=${boards.number+1} ๋กœ ๊ตฌํ˜„ํ•จ.
<ul class="pagination justify-content-center">
<c:choose>
	<c:when test="${boards.first }">
		<li class="page-item disabled"><a class="page-link" href="?page=${boards.number-1 }">Previous</a></li> 
	</c:when>
	<c:otherwise>
		  <li class="page-item"><a class="page-link" href="?page=${boards.number-1}">Previous</a></li>
	</c:otherwise>
</c:choose>

<c:choose>
	<c:when test="${boards.last }">
		<li class="page-item disabled"><a class="page-link" href="?page=${boards.number+1 }">Next</a></li> 
	</c:when>
	<c:otherwise>
		  <li class="page-item"><a class="page-link" href="?page=${boards.number+1}">Next</a></li>
	</c:otherwise>
</c:choose>
</ul>

 

5. ํŽ˜์ด์ง• ๊ตฌํ˜„ ์™„๋ฃŒ

 

profile

YeaLow

@YeaLow

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!