2022_04_14 - oneso123456789/2022 GitHub Wiki

Other

๋””๋ฒ„๊น…

๋’ค๋กœ ๊ฐ€๊ธฐ ๋ฌธ์ œ ์ฒ˜๋ฆฌ๋ถ€๋ถ„

๋’ค๋กœ๊ฐ€๊ธฐ์‹œ ๋ชจ๋‹ฌ์ฐฝ ๋œจ๋Š” ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋˜์ค‘ list.jsp์˜ scriptํƒœ๊ทธ ์ž‘์„ฑ์ค‘ ๋ฐœ์ƒ
history.state๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”๋Œ€ history.State๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž‘๋™์ด ์•ˆ๋จ
๊ทธ๋ƒฅ s๋ฅผ ๋‹ค์‹œ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•จ
Java Script์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋จ TnT

11.5 ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ •/์‚ญ์ œ ์ฒ˜๋ฆฌ

์ด ๋ถ€๋ถ„์—์„  2๊ฐœ์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Œ

1) modify ๋ฒ„ํŠผ ์ฒ˜๋ฆฌ

form์„ ๋งŒ๋“ค๋•Œ method๋ฅผ post๊ฐ€ ์•„๋‹Œ get์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ๊ฒŒ์‹œ๊ธ€์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•œํ›„ modify๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด๋„
๋‚ด์šฉ์ด ๋ฐ”๋€Œ์ง€ ์•Š์•˜์Œ form์˜ ๋™์ž‘ method๋ฅผ post๋กœ ๋ณ€๊ฒฝํ•ด์„œ ํ•ด๊ฒฐํ•จ

<form role="form" action="/board/modify" method="get"> -> <form role="form" action="/board/modify" method="post">

form์ด๋‚˜ ๋ฒ„ํŠผ์„ ๋™์ž‘์‹œํ‚ฌ๋• ์•Œ๋งž์€ method ์‚ฌ์šฉํ•ด์•ผํ•จ

2) removeํ›„ list๋กœ redirect ์˜ค๋ฅ˜

1๋ฒˆ์„ ํ•ด๊ฒฐํ•œ ํ›„ remove ํ…Œ์ŠคํŠธ์ค‘ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์ž„
remove ๋กœ์ง์€ ๋Œ์•„๊ฐ€์ง€๋งŒ ๋‹จ์ˆœํžˆ redirect ๊ฒฝ๋กœ๊ฐ€ ์ด์ƒํ•œ๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€๋จ(/WEB-INF/views//redirect:/board/list.jsp)
ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•์€ BoardController.class์—
PostMapping์˜ remove()๋ฉ”์†Œ๋“œ์˜ ๋ฆฌํ„ด๊ฐ’์— /๊ฐ€ ํฌํ•จ๋˜์–ด์„œ /WEB-INF/views//redirect:์ด๋Ÿฐ ๊ฒฝ๋กœ๋กœ ์„ค์ •๋œ๊ฒŒ ๋ฌธ์ œ์˜€์Œ

return "/redirect:/board/list"; -> return "redirect:/board/list";

๋ณ€๊ฒฝํ›„ ํ•ด๊ฒฐํ•จ

๋‘๊ฐœ ๋ชจ๋‘ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šด ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์—ˆ์Œ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๊ฒŒ ์ œ์ผ ์ข‹์€๋ฐฉ๋ฒ•์ด์ง€๋งŒ
๊ทธ๋Ÿด์ˆ˜์—†์œผ๋‹ˆ ์ตœ๋Œ€ํ•œ ์ •ํ™•ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š” ๋Šฅ๋ ฅ์„ ๊ธธ๋Ÿฌ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐ๋จ

11.4.2 ๋ชฉ๋กํŽ˜์ด์ง€์™€ ๋’ค๋กœ ๊ฐ€๊ธฐ ๋ฌธ์ œ

๋’ค๋กœ๊ฐ€๊ธฐ ๋ฌธ์ œ

๋™์ผํ•œ ํŽ˜์ด์ง€ ๋‚ด์—์„œ ๋ชฉ๋ก ํŽ˜์ด์ง€์™€ ์กฐํšŒ ํŽ˜์ด์ง€์˜ ์ด๋™์€ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ๊ฒƒ ๊ฐ™์•„๋ณด์ด์ง€๋งŒ
ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋‚จ์•„ ์žˆ์Œ ๋“ฑ๋ก -> ๋ชฉ๋ก -> ์กฐํšŒ๊นŒ์ง€๋Š” ์ˆœ์กฐ๋กญ์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €์˜ ๋’ค๋กœ๊ฐ€๊ธฐ๋ฅผ
์„ ํƒํ•˜๋Š” ์ˆœ๊ฐ„ ๋‹ค์‹œ ๊ฒŒ์‹œ๋ฌผ์˜ ๋“ฑ๋ก ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ชจ๋‹ฌ์ด ๋™์ž‘ํ•œ๋‹ค๋Š”๊ฒƒ์ž„
๋ฌธ์ œ ํ‘œํ˜„๊ทธ๋ฆผ(p256)์ฐธ๊ณ 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ์›์ธ์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋’ค๋กœ ๊ฐ€๊ธฐ๋‚˜ ์•ž์œผ๋กœ ๊ฐ€๊ธฐ๋ฅผ ํ•˜๋ฉด ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ
๊ณผ๊ฑฐ์— ์ž์‹ ์ด ๊ฐ€์ง„ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž„
๋ธŒ๋ผ์šฐ์ €์—์„œ ์กฐํšŒ ํŽ˜์ด์ง€์™€ ๋ชฉ๋ก ํŽ˜์ด์ง€๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์•ž์œผ๋กœ ํ˜น์€ ๋’ค๋กœ ์ด๋™ํ•ด๋„ ์„œ๋ฒ„์—์„œ๋Š” ์ฒ˜์Œ์— ํ˜ธ์ถœ์„ ์ œ์™ธํ•˜๊ณ 
๋ณ„๋‹ค๋ฅธ ๋ณ€ํ™”๊ฐ€ ์—†๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด windows์˜ history ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ํ˜„์žฌ ํŽ˜์ด์ง€๋Š” ๋ชจ๋‹ฌ์ฐฝ์„ ๋„์šธ ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ 
ํ‘œ์‹œ๋ฅผ ํ•ด ๋‘๋Š” ๋ฐฉ์‹์„ ์ด์šฉํ•ด์•ผ ํ•จ
Windows์˜ history ๊ฐ์ฒด๋ฅผ ์Šคํƒ ๊ตฌ์กฐ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜ ๊ทธ๋ฆผ์œผ๋กœ ์›๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Œ
(p256 ์ค‘๊ฐ„ ๊ทธ๋ฆผ)

๊ทธ๋ฆผ1์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด๊ณ  '/board/list'๋ฅผ ์ตœ์ดˆ๋กœ ํ˜ธ์ถœํ•œ ๊ฒƒ์ž„
history์— ์Œ“์œผ๋ฉด์„œ ํ˜„์žฌ ํŽ˜์ด์ง€๋Š” ๋ชจ๋‹ฌ์ฐฝ์„ ๋ณด์—ฌ์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ํ‘œ์‹œ(๊ทธ๋ฆผ์—์„œ ์ž‘์€์ƒ์ž)

๊ทธ๋ฆผ2๋Š” ์‚ฌ์šฉ์ž๊ฐ€ /board/register๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฝ์šฐ์ž„
์Šคํƒ์˜ ์ƒ๋‹จ์— /board/register๊ฐ€ ์Œ“์ž„ ๋งŒ์ผ ์ด ์ƒํƒœ์—์„œ ๋’ค๋กœ ๊ฐ€๊ธฐ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์ชฝ์˜ /board/list๊ฐ€ ๋ณด์—ฌ์ง€๋Š”๋ฐ
์ด๋•Œ ์‹ฌ์–ด๋‘” ํ‘œ์‹œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ชจ๋‹ฌ์ฐฝ์„ ๋„์šธ ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Œ

๊ทธ๋ฆผ 3์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋“ฑ๋ก์„ ์™„๋ฃŒํ•˜๊ณ  /board/list๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์ƒํ™ฉ์ž„
๋ธŒ๋ผ์šฐ์ €์—์„œ ์•ž์œผ๋กœ ๊ฐ€๊ธฐ๋‚˜๋’ค๋กœ๊ฐ€๊ธฐ๋กœ ์ด๋™ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ์Šคํƒ์˜ ์ƒ๋‹จ์— ์ถ”๊ฐ€๋จ
๋“ฑ๋ก ์งํ›„์— /board/list๋กœ ์ด๋™ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋‹ฌ์ฐฝ์ด ๋™์ž‘ํ•จ

๊ทธ๋ฆผ 3์—์„œ ๋ชจ๋‹ฌ์ฐฝ์„ ๋ณด์—ฌ์ค€ ํ›„์—๋Š” ์Šคํƒ์˜ ์ƒ๋‹จ์— ๋ชจ๋‹ฌ์ฐฝ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ํ‘œ์‹œ๋ฅผ ํ•ด ์ฃผ์–ด์•ผ ํ•จ
์ด์šฐ์—/board/regisger๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๊ทธ๋ฆผ 4์™€ ๊ฐ™์ด ๋จ

windows.history ๊ฐ์ฒด๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ์ด๋ก ์œผ๋กœ๋Š” ๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ,
์‚ฌ์‹ค์€ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์•ฝ๊ฐ„์˜ ๋ณ€ํ™”๋งŒ ์žˆ์„๋ฟ์ž„

list.jsp์—์„œ JavaScript ๋ถ€๋ถ„

<script type="text/javascript">
	$(document).ready(
			function() {
				var result = '<c:out value="${result}"/>';

				checkModal(result);

				history.replaceState({}, null, null);

				function checkModal(result) {

					if (result === '' || history.state) {
						return;
					}

					if (parseInt(result) > 0) {
						$(".modal-body").html(
								"๊ฒŒ์‹œ๊ธ€ " + parseInt(result) + " ๋ฒˆ์ด ๋“ฑ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
					}

					$("#myModal").modal("show");
				}

				$("#regBtn").on("click", function() {

					self.location = "/board/register"

				});

			});
</script>

๊ธฐ์กด๊ณผ ๋‹ฌ๋ผ์ง„ ์ ์€ ๋งจ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€๋œ history.replaceState()๋ถ€๋ถ„๊ณผ checkModal()์—์„œ
history.state๋ฅผ ์ฒดํฌํ•˜๋Š” ๋ถ€๋ถ„์ž„
JavaScript์˜ ์ฒ˜๋ฆฌ๋Š” ์šฐ์„  checkModal()์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ, ๋งŒ์ผ ๋“ฑ๋ก๋œ ํ›„์— ์ด๋™ํ•œ ๊ฒƒ์ด๋ผ๋ฉด
์œ„์˜ ๊ทธ๋ฆผ 3์ฒ˜๋Ÿผ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋‹ฌ์ฐฝ์ด ๋ณด์ด๊ฒŒ ๋จ

๋ชจ๋‹ฌ์ฐฝ์ด ๋ณด์ด๋Š” ์—ฌ๋ถ€์™€ ๊ด€๊ณ„์—†์ด javaScript์˜ ๋ชจ๋“  ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๊ฒŒ ๋˜๋ฉด history์— ์Œ“์ด๋Š” ์ƒํƒœ๋Š”
๋ชจ๋‹ฌ์ฐฝ์„ ๋ณด์—ฌ์ค„ ํ•„์š”๊ฐ€ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋จ
์ตœ์ข…์  ๊ฒฐ๊ณผ๋Š” p258๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ๋จ

11.5 ๊ฒŒ์‹œ๋ฌผ์˜ ์ˆ˜์ •/์‚ญ์ œ ์ฒ˜๋ฆฌ

๊ฒŒ์‹œ๋ฌผ์˜ ์ˆ˜์ • ์ž‘์—…์€ ์ผ๋ฐ˜์ ์œผ๋กœ

  1. ์กฐํšŒ ํŽ˜์ด์ง€์—์„œ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‚˜
  2. ๋ณ„๋„์˜ ์ˆ˜์ •/์‚ญ์ œ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ ์ˆ˜์ •๊ณผ ์‚ญ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ๋งŽ์ด ์‚ฌ์šฉํ•จ
    ์ตœ๊ทผ์—๋Š” ๊ฒŒ์‹œ๋ฌผ์˜ ์กฐํšŒ ํŽ˜์ด์ง€์—์„œ ๋Œ“๊ธ€ ๋“ฑ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๋งŽ์•„์ง€๋ฉด์„œ
    ์ˆ˜์ •๊ณผ ์‚ญ์ œ๋Š” ๋ณ„๊ฐœ์˜ ํŽ˜์ด์ง€์—์„œ ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž„

์กฐํšŒ ํŽ˜์ด์ง€์—์„œ๋Š” GET ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” URL์„ ํ†ตํ•ด์„œ ์ˆ˜์ •/์‚ญ์ œ ๋ฒ„ํŠผ์ด ์กด์žฌํ•˜๋Š”
ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ์ œ์ž‘ํ•ด์•ผ ํ•จ
์ˆ˜์ • ํ˜น์€ ์‚ญ์ œ ์ž‘์—…์€ POST๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๊ณ , ๊ฒฐ๊ณผ๋Š” ๋‹ค์‹œ ๋ชฉ๋ก ํ™”๋ฉด์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์ œ์ž‘ํ•จ

11.5.1 ์ˆ˜์ •/์‚ญ์ œ ํŽ˜์ด์ง€๋กœ ์ด๋™

BoardController์—์„œ ์ˆ˜์ •/์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์€ ์กฐํšŒ ํŽ˜์ด์ง€์™€ ๊ฐ™์Œ
๋”ฐ๋ผ์„œ ๊ธฐ์กด์˜ get() ๋ฉ”์„œ๋“œ๋ฅผ ์กฐ๊ธˆ ์ˆ˜์ •ํ•ด์„œ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•จ

BoardController์˜ ์ผ๋ถ€

    @GetMapping({"/get", "/modify"})
    public void get(@RequestParam("bno") Long bno, Model model) {

        log.info("BoardController /get or modify");
        model.addAttribute("board", service.get(bno));
    }

@GetMapping์ด๋‚˜ @PostMapping ๋“ฑ์—๋Š” URL์„ ๋ฐฐ์—ด๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ,
์œ„์™€ ๊ฐ™์ด ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ๋กœ ์—ฌ๋Ÿฌ URL์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” /board/modify?bno=30๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ, views ํด๋” ๋‚ด modify.jsp๋ฅผ ์ž‘์„ฑํ•จ

modify.jsp๋Š” get.jsp์™€ ๊ฐ™์ง€๋งŒ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•œ ์ œ๋ชฉ์ด๋‚˜ ๋‚ด์šฉ๋“ฑ์ด readonly ์†์„ฑ์ด ์—†๋„๋ก ์ž‘์„ฑํ•จ
POST ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์„ ์œ„ํ•ด์„œ๋Š”

ํƒœ๊ทธ๋กœ ๋‚ด์šฉ๋“ค์„ ๊ฐ์‹ธ๊ฒŒ ํ•จ

views/board/modify.jsp์˜ ์ผ๋ถ€

<form role="form" action="/board/modify" method="get">

					<div class="form-group">
						<label>Bno</label> <input class="form-control" name='bno'
							value='<c:out value="${board.bno }"/>' readonly="readonly">
					</div>

					<div class="form-group">
						<label>Title</label> <input class="form-control" name='title'
							value='<c:out value="${board.title }" />'>
					</div>

					<div class="form-group">
						<label>Text area</label>
						<textarea class="form-control" rows="3" name='content'><c:out
								value="${board.content }" /></textarea>
					</div>

					<div class="form-group">
						<label>Writer</label> <input class="form-control" name='writer'
							value='<c:out value="${board.writer }"/>' readonly="readonly">
					</div>

					<div class="form-group">
						<label>RegDate</label> <input class="form-control" name='regDate'
							value='<fmt:formatDate pattern="yyyy/MM/dd" value="${board.regdate }" />'
							readonly="readonly">
					</div>

					<div class="form-group">
						<label>Update Date</label> <input class="form-control"
							name='updateDate'
							value='<fmt:formatDate pattern="yyyy/MM/dd" value="${board.updateDate }" />'
							readonly="readonly">
					</div>

					<button type="submit" data-oper='modify' class="btn btn-default">Modify</button>
					<button type="submit" data-oper='remove' class="btn btn-danger">Remove</button>
					<button type="submit" data-oper='list' class="btn btn-info">List</button>
				</form>

<form> ํƒœ๊ทธ๋Š” action ์†์„ฑ์„ /board/modify๋กœ ์ง€์ •ํ–ˆ์ง€๋งŒ, ์‚ญ์ œ๋ฅผ ํ•˜๋ฉด /board/remove์™€ ๊ฐ™์ด
action ์†์„ฑ์˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋จ
๊ฒŒ์‹œ๋ฌผ์˜ ์ œ๋ชฉ, ๋‚ด์šฉ์€ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
๋“ฑ๋ก์ผ๊ณผ ์ˆ˜์ •์ผ์€ ๋‚˜์ค‘์— BoardVO๋กœ ์ˆ˜์ง‘๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ๋‚ ์งœ ํฌ๋งท์„ yyyy/MM/dd์˜ ํฌ๋งท์œผ๋กœ ํ•ด์•ผํ•จ
(๋งŒ์ผ ํฌ๋งท์ด ๋งž์ง€ ์•Š์œผ๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜์ง‘ ๋ถ€๋ถ„์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•จ)
๋งˆ์ง€๋ง‰์—๋Š” ์ˆ˜์ •/์‚ญ์ œ/๋ชฉ๋ก๋“ฑ์˜ ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•จ

๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” /board/modify?bno=52(์กด์žฌํ•˜๋Š” ๊ฒŒ์‹œ๋ฌผ์˜ ๋ฒˆํ˜ธ)์™€ ๊ฐ™์ด
๊ฒŒ์‹œ๋ฌผ ๋ฒˆํ˜ธ๋ฅผ ์ด์šฉํ•ด์„œ ์ˆ˜์ • ํŽ˜์ด์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š”์ง€ ํ™•์ธ

JavaScript์—์„œ๋Š” ์œ„์˜ ๋ฒ„ํŠผ์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ์ข…์ž‘์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ•ด์•ผํ•จ

modify.jsp ์ผ๋ถ€

<script type="text/javascript">
	$(document).ready(function() {

		var formObj = $("form");

		$('button').on("click", function(e) {

			e.preventDefault();

			var operation = $(this).data("oper");

			console.log(operation);

			if (operation === 'remove') {
				formObj.attr("action", "/board/remove");
			} else if (operation === 'list') {
				// move list
				self.location = "/board/list";
				return;
			}
			formObj.submit();

		});
	});
</script>

JavaScript์—์„œ๋Š” <button>ํƒœ๊ทธ์˜ data-oper ์†์„ฑ์„ ์ด์šฉํ•ด์„œ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋™์ž‘ํ•˜๋„๋ก ์ฒ˜๋ฆฌํ•จ
<form> ํƒœ๊ทธ์˜ ๋ชจ๋“  ๋ฒ„ํŠผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ submit์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— e.preventDefault()๋กœ
๊ธฐ๋ณธ๋™์ž‘์„ ๋ง‰๊ณ  ๋งˆ์ง€๋ง‰์— ์ง์ ‘ submit()์„ ์ˆ˜ํ–‰ํ•จ
2022_04_14 ์˜ค์ „ 4์‹œ 46๋ถ„ ์—ฌ๊ธฐ๊นŒ์ง€ํ•จ

11.5.2 ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ •/์‚ญ์ œ ํ™•์ธ

ํ™”๋ฉด์—์„œ ๊ฒŒ์‹œ๋ฌผ์„ ์ˆ˜์ •ํ•œ ํ›„์— modify๋ฒ„ํŠผ์„ ํ†ตํ•ด์„œ BoardController์— ์ˆ˜์ •์„ ์š”์ฒญํ•จ

Modify ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด BoardController์—์„œ๋Š” ์ฃผ์–ด์ง„ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ BoardVO๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๊ณ ,
์ˆ˜์ •๋œ ๊ฐ’์ด ์ œ๋Œ€๋กœ ์ˆ˜์ง‘๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ (p263)

๊ฒŒ์‹œ๋ฌผ์ด ์ˆ˜์ •๋œ ํ›„์—๋Š” ๋‹ค์‹œ /board/list ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋จ
์ด ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” ์ด๋ฏธ ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋ชจ๋‹ฌ์ฐฝ์„ ํ†ตํ•ด์„œ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

ํ™”๋ฉด์—์„œ Remove๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ฒŒ ๋˜๋ฉด <form>ํƒœ๊ทธ์˜ action ๊ฐ’์ด /board/remove๊ฐ€ ๋˜๊ณ 
๋ฐ์ดํ„ฐ๋“ค์ด ์ „์†ก๋จ
๋ฌผ๋ก  BoardController์—์„œ๋Š” bno ๊ฐ’ ํ•˜๋‚˜๋งŒ ํ•„์š”ํ•˜์ง€๋งŒ ์ฒ˜๋ฆฌ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์Œ
์‚ญ์ œ ์‹œ BoardController์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋กœ๊ทธ๊ฐ€ ๊ธฐ๋ก๋˜๊ฒŒ ๋จ

11.5.3 ์กฐํšŒ ํŽ˜์ด์ง€์—์„œ

์ฒ˜๋ฆฌ

๊ฒŒ์‹œ๋ฌผ์˜ ์กฐํšŒ ํŽ˜์ด์ง€์—์„œ๋Š” ์ˆ˜์ •๊ณผ ์‚ญ์ œ๊ฐ€ ํ•„์š”ํ•œ ํŽ˜์ด์ง€๋กœ ๋งํฌ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผํ•จ
์ง์ ‘ ๋ฒ„ํŠผ์— ๋งํฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜์˜€์ง€๋งŒ,
๋‚˜์ค‘์— ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ <form> ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด์„œ ์ˆ˜์ •ํ•จ

views/board/get.jsp์˜ ์ผ๋ถ€

				<button data-oper='modify' class="btn btn-default">Modify</button>
				<button data-oper='list' class="btn btn-info">List</button>

				<form id='operForm' action="/board/modify" method="get">
					<input type='hidden' id='bno' name='bno'
						value='<c:out value="${board.bno }"/>'>
				</form>

๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š”<form> ํƒœ๊ทธ์˜ ๋‚ด์šฉ์€ ๋ณด์ด์ง€ ์•Š๊ณ  ๋ฒ„ํŠผ๋งŒ์ด ๋ณด์ด๊ฒŒ ๋จ

์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด operForm์ด๋ผ๋Š” id๋ฅผ ๊ฐ€์ง„ <form>ํƒœ๊ทธ๋ฅผ ์ „์†กํ•ด์•ผ ํ•˜๋ฏ€๋กœ
์ถ”๊ฐ€์ ์ธ JavaScript ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•จ

get.jsp์˜ ์ผ๋ถ€

<script type="text/javascript">
	$(document).ready(function() {

		var operForm = $("#operForm");

		$("button[data-oper='modify']").on("click", function(e) {

			operForm.attr("action", "/board/modify").submit();

		});

		$("button[data-oper='list']").on("click", function(e) {

			operForm.find("#bno").remove();
			operForm.attr("action", "/board/list")
			operForm.submit();

		});
	});
</script>

์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋Š” ๊ฒฝ์šฐ์—๋Š” bno ๊ฐ’์„ ๊ฐ™์ด ์ „๋‹ฌํ•˜๊ณ  <form> ํƒœ๊ทธ๋ฅผ submit์‹œ์ผœ์„œ ์ฒ˜๋ฆฌํ•จ
๋งŒ์ผ ์‚ฌ์šฉ์ž๊ฐ€ list๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„์ง ์•„๋ฌด๋Ÿฐ ๋ฐ์ดํ„ฐ๋„ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ
<form>ํƒœ๊ทธ ๋‚ด์˜ bno ํƒœ๊ทธ๋ฅผ ์ง€์šฐ๊ณ  submit์„ ํ†ตํ•ด์„œ ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•จ

11.5.4 ์ˆ˜์ • ํŽ˜์ด์ง€์—์„œ ๋งํฌ ์ฒ˜๋ฆฌ

์ˆ˜์ • ํŽ˜์ด์ง€์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์‹œ ๋ชฉ๋ก ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ
JavaScript ๋‚ด์šฉ์„ ์กฐ๊ธˆ ์ˆ˜์ •ํ•จ

views/board/modify.jsp์˜ ์ผ๋ถ€

<script type="text/javascript">
	$(document).ready(function() {

		var formObj = $("form");

		$('button').on("click", function(e) {

			e.preventDefault();

			var operation = $(this).data("oper");

			console.log(operation);

			if (operation === 'remove') {
				formObj.attr("action", "/board/remove");
			} else if (operation === 'list') {
				// move list
				formObj.attr("action", "/board/list").attr("method", "get");
				formObj.empty();
			}

			formObj.submit();

		});
	});
</script>

์ˆ˜์ •๋œ ๋‚ด์šฉ์€ ํด๋ฆญํ•œ ๋ฒ„ํŠผ์ด List์ธ๊ฒฝ์šฐ action ์†์„ฑ๊ณผ method ์†์„ฑ์„ ๋ณ€๊ฒฝํ•จ

/board/list๋กœ์˜ ์ด๋™์€ ์•„๋ฌด๋Ÿฐ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— <form>ํƒœ๊ทธ์˜ ๋ชจ๋“  ๋‚ด์šฉ์€ ์‚ญ์ œํ•œ ์ƒํƒœ์—์„œ submit()์„ ์ง„ํ–‰ํ•จ
์ดํ›„์— ์ฝ”๋“œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก return์„ ํ†ตํ•ด์„œ ์ œ์–ดํ•จ

์ด ์žฅ์—์„œ ์ง„ํ–‰๋œ ๋ชจ๋“  ๋‚ด์šฉ์„ ๋„์‹ํ™” ์‹œํ‚ค๋ฉด p267์— ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๊ฐ€ ๋จ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ