2022_04_10 - oneso123456789/2022 GitHub Wiki

Other

๋””๋ฒ„๊น…

๋ชจ๋‹ฌ์ฐฝ์ด ์•ˆ๋‚˜์˜ค๋˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•์€ div์˜ id๋‚˜ ํด๋ž˜์Šค์˜ ๋Œ€์†Œ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅธ๊ฑฐ ๊ฐ™์Œ ํ™•์ธ๊ฒฐ๊ณผ

				<div class="modal fade" id="mymodal" tabindex="-1" role="dialog"
				    aria-labelledby="myModalLabel" aria-hidden="true">

์—์„œ id๊ฐ€ myModal์—์„œ mymodal๋กœ ๋Œ€๋ฌธ์ž๊ฐ€ ๋ˆ„๋ฝ๋จ

				<div class="modal fade" id="myModal" tabindex="-1" role="dialog"
					aria-labelledby="myModalLabel" aria-hidden="true">

์œ„์ฒ˜๋Ÿผ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ–ˆ๋”๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•จ
js๋Š” ์—๋””ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋˜์ง€ ์–ธ์ œ๋‚˜ ๋” ํ™•์‹คํžˆ ํ™•์ธํ•ด์•ผํ•จ

์–ด์ œ ๋งˆ์ง€๋ง‰ ๋‚ด์šฉ

11.3.3๋ชจ๋‹ฌ(Modal)์ฐฝ ๋ณด์—ฌ์ฃผ๊ธฐ
์ตœ๊ทผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฒฝ๊ณ ์ฐฝ(alert)์„ ๋„์šฐ๋Š” ๋ฐฉ์‹๋ณด๋‹ค ๋ชจ๋‹ฌ์ฐฝ(Modal)์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์„
๋งŽ์ด ์‚ฌ์šฉํ•จ
BootStrap์€ ๋ชจ๋‹ฌ์ฐฝ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ชฉ๋ก ํ™”๋ฉด์—์„œ ํ•„์š”ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ
๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Œ
์ตœ์ข…์ ์ธ ํ˜•ํƒœ๋Š” p247์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๋ชจ์Šต์ด๋จ

๋ชจ๋‹ฌ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ<div>๋ฅผ ํ™”๋ฉด์— ํŠน์ •์œ„์น˜์— ๋ณด์—ฌ์ฃผ๊ณ , ๋ฐฐ๊ฒฝ์ด ๋˜๋Š” <div>์— ๋ฐฐ๊ฒฝ์ƒ‰์„ ์ž…ํ˜€์„œ ์ฒ˜๋ฆฌํ•จ
๋ชจ๋‹ฌ์ฐฝ์€ ํ™œ์„ฑํ™”๋œ <div>๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š๊ณ ๋Š” ๋‹ค์‹œ ์›๋ž˜์˜ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์—†๋„๋ก ๋ง‰๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ
ํšจ๊ณผ์ ์ธ ๋ฐฉ์‹์ž„

๋ชจ๋‹ฌ์ฐฝ์— ๋Œ€ํ•œ ์ฝ”๋“œ๋Š” ๋‹ค์šด๋กœ๋“œํ•œ SBAdmin2์˜ pages ํด๋” ๋‚ด notifications.html ํŒŒ์ผ์„ ์ฐธ๊ณ ํ•˜๋ฉด ๋จ

๋ชจ๋‹ฌ์ฐฝ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„  <div>๋ฅผ ์ด์šฉํ•ด์„œ ํŽ˜์ด์ง€์˜ ์ฝ”๋“œ์— ์ถ”๊ฐ€ํ•ด์•ผํ•จ
list.jsp ๋‚ด์— <table> ํƒœ๊ทธ์˜ ์•„๋ž˜์ชฝ์— ๋ชจ๋‹ฌ์ฐฝ์˜ <div>๋ฅผ ์ถ”๊ฐ€ํ•จ

list.jsp ํŽ˜์ด์ง€์˜ ์ˆ˜์ •

</table><!-- tableํƒœ๊ทธ์˜ ๋-->
				
				<!-- Modal ์ถ”๊ฐ€ -->
				<div class="modal fade" id="mymodal" tabindex="-1" role="dialog"
				    aria-labelledby="myModalLabel" aria-hidden="true">
				    <div class="modal-dialog">
				        <div class="modal-content">
				            <div class="modal-header">
				                <button type="button" class="close" data-dismiss="modal"
				                aria-hidden="true">&times;</button>
				                <h4 class="modal-title" id="myModalLabel">Modal title</h4>
				            </div>
				            <div class="modal-body">์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.</div>
				            <div class="modal-footer">
				                <button type="button" class="btn btn-default"
				                data-dismiss="modal">Close</button>
				                <button type="button" class="btn btn-primary">Save changes</button>
				            </div>
				        </div>
				        <!-- /.modal-content -->
				    </div>
				    <!-- /.modal-dialog -->
				</div>
				<!-- /.modal -->

<-- 2022_04_09 Modal๊ด€๋ จ div๋ฅผ ๋งŒ๋“ค๊ธด ํ–ˆ์ง€๋งŒ ์•„์ง ๋ชจ๋‹ฌ์ฐฝ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ž‘์—…๋„ ์•ˆํ•˜๊ณ  ์†Œ์Šค์— ๋Œ€ํ•œ ๋””๋ฒ„๊น…๋„ ์•ˆํ•ด์„œ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„์ˆ˜ ์žˆ์œผ๋‹ˆ 10์ผ์— ๊ณ ์น˜๋„๋ก ํ•˜๊ฒ ์Œ -->

๋ชจ๋‹ฌ์ฐฝ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ž‘์—…์€ jQuery๋ฅผ ์ด์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•จ

list.jsp ๋‚ด jQuery์ฒ˜๋ฆฌ

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

				checkModal(result);

				function checkModal(result) {

					if (result === '') {
						return;
					}

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

					$("#myModal").modal("show");
				}
			});
</script>

checkModal()ํ•จ์ˆ˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋”ฐ๋ผ์„œ ๋ชจ๋‹ฌ์ฐฝ์„ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•œ ๋’ค ๋ณด์ด๋„๋ก ์ž‘์„ฑํ•จ
checkModal()์—์„œ๋Š” ์ƒˆ๋กœ์šด ๊ฒŒ์‹œ๊ธ€์ด ์ž‘์„ฑ๋˜๋Š” ๊ฒฝ์šฐ RedirectAttributes๋กœ ๊ฒŒ์‹œ๋ฌผ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ „์†ก๋˜๋ฏ€๋กœ
์ด๋ฅผ ์ด์šฉํ•ด์„œ ๋ชจ๋‹ฌ์ฐฝ์˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•จ
$("modal").modal('show')๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์œ„์˜ ํ™”๋ฉด์ฒ˜๋Ÿผ ๋ชจ๋‹ฌ์ฐฝ์ด ๋ณด์ด๊ฒŒ ๋จ

์ด์ œ 'board/register'๋ฅผ ์ด์šฉํ•ด์„œ ์ƒˆ๋กœ์šด ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ•˜๊ณ  ๋‚˜๋ฉด ์ž๋™์œผ๋กœ 'board/list๋กœ
์ด๋™ํ•˜๋ฉด์„œ ๋ชจ๋‹ฌ์ฐฝ์ด ๋ณด์ด๊ฒŒ๋จ

11.3.4 ๋ชฉ๋ก์—์„œ ๋ฒ„ํŠผ์œผ๋กœ ์ด๋™ํ•˜๊ธฐ

๊ฒŒ์‹œ๋ฌผ์˜ ์ž‘์„ฑ๊ณผ ๋ชฉ๋ก ํŽ˜์ด์ง€๋กœ ์ด๋™์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ–ˆ๋‹ค๋ฉด, ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ชฉ๋ก ํŽ˜์ด์ง€ ์ƒ๋‹จ์—
๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•ด์„œ ๋“ฑ๋ก ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผํ•จ

์šฐ์„ ์€ list.jsp์˜ HTML๊ตฌ์กฐ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•จ

<div class="panel-heading">
				Board List Page
				<button id='regBtn' type="button" class="btn btn-xs pull-right">Register
					New Board</button>
			</div>

list.jsp ํ•˜๋‹จ์˜ jQuery๋ฅผ ์ด์šฉํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ํ•ด๋‹น ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ์˜ ๋™์ž‘์„ ์ •์˜ํ•จ

list.jsp ํ•˜๋‹จ์˜ script

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

				checkModal(result);

				function checkModal(result) {

					if (result === '') {
						return;
					}

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

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

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

					self.location = "/board/register"

				});

			});
</script>

ํ™”๋ฉด์—์„œ Register New Board๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๊ฒŒ์‹œ๋ฌผ์˜ ๋“ฑ๋ก ํŽ˜์ด์ง€๋กœ ์ด๋™ ํ•  ์ˆ˜ ์žˆ์Œ

11.4 ์กฐํšŒ ํŽ˜์ด์ง€์™€ ์ด๋™

๊ฒŒ์‹œ๋ฌผ์˜ ๋“ฑ๋ก๊ณผ ๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚ฌ๋‹ค๋ฉด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ‹€์€ ์™„์„ฑ๋˜์—ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ
๋‹ค์Œ์œผ๋กœ๋Š” ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ ๋งํฌ๋ฅผ ํ†ตํ•ด์„œ GET ๋ฐฉ์‹์œผ๋กœ ํŠน์ •ํ•œ ๋ฒˆํ˜ธ์˜ ๊ฒŒ์‹œ๋ฌผ์„
์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ž‘์„ฑํ•จ

11.4.1 ์กฐํšŒ ํŽ˜์ด์ง€ ์ž‘์„ฑ

์กฐํšŒ ํŽ˜์ด์ง€๋Š” ์ž…๋ ฅ ํŽ˜์ด์ง€์™€ ๊ฑฐ์˜ ์œ ์‚ฌํ•˜์ง€๋งŒ ๊ฒŒ์‹œ๋ฌผ์˜ ๋ฒˆํ˜ธ(bno)๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค๋Š” ์ ๊ณผ
๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ์ ์ด ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ž„

๊ฒŒ์‹œ๋ฌผ์˜ ์กฐํšŒ๋Š” BoardController์—์„œ get()๋ฉ”์„œ๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ ####com.crow.controller.BoardControllerํด๋ž˜์Šค์˜ ์ผ๋ถ€

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

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

views/board ํด๋” ๋‚ด get.jsp๋ฅผ register.jsp๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์ž‘์„ฑํ•จ

get.jsp๋Š” ๊ฒŒ์‹œ๋ฌผ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” readonly๋ฅผ ์ง€์ •ํ•ด์„œ ์ž‘์„ฑํ•จ
register.jsp์— ์žˆ๋˜

ํƒœ๊ทธ๋Š” ์กฐํšŒ ํŽ˜์ด์ง€์—์„œ๋Š” ๊ทธ๋‹ค์ง€ ํ•„์š”ํ•˜์ง€ ์•Š์Œ ๋”ฐ๋ผ์„œ ์ œ๊ฑฐํ•˜๊ณ 
๋Œ€์‹  ๋งˆ์ง€๋ง‰์— ์ˆ˜์ •/์‚ญ์ œ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ์›๋ž˜์˜ ๋ชฉ๋ก ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•จ

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

<div class="row">
	<div class="col-lg-12">
		<div class="panel panel-default">
			<div class="panel-heading">Board Read Page</div>
			<!-- /.panel-heading -->
			<div class="panel-body">

				<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 }" />' readonly="readonly">
				</div>

				<div class="form-group">
					<label>Text area</label>
					<textarea class="form-control" rows="3" name='content'
						readonly="readonly"><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>

				<button data-oper='modify' class="btn btn-default">
					<a href="/board/modify?bno=<c:out value="${board.bno}"/>">Modify</a>
				</button>
				<button data-oper='list' class="btn btn-info">
					<a href="/board/list">List</a>
				</button>

			</div>
			<!-- end panel-body -->

		</div>
		<!-- end panel-body -->
	</div>
	<!-- end panel -->
</div>
<!-- /.row -->
<%@ include file="../includes/footer.jsp"%>

๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” /board/get?bno=1๊ณผ ๊ฐ™์ด ๊ฒŒ์‹œ๋ฌผ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ˜๋“œ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•ด์ค˜์•ผํ•จ
ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•˜๋Š” bno ๊ฐ’์ด ์กด์žฌํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํŽ˜์ด์ง€๋ฅผ ๋ณด๊ฒŒ๋จ(p253์ฐธ๊ณ )

ํ•˜๋ฉด ํ•˜๋‹จ์˜ ๋ฒ„ํŠผ์€ /board/list or /board/modify?bno=xx์™€ ๊ฐ™์ด ์ด๋™ํ•˜๋Š” ๋งํฌ๋ฅผ aํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด์„œ ์ถ”๊ฐ€ํ•ด์คŒ

get.jsp ํ•˜๋‹จ์˜ button

<button data-oper='modify' class="btn btn-default">
					<a href="/board/modify?bno=<c:out value="${board.bno}"/>">Modify</a>
				</button>
				<button data-oper='list' class="btn btn-info">
					<a href="/board/list">List</a>
				</button>

254p 11.4.2 ์ „๊นŒ์ง€ ํ•จ

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