02P. ๊ณตํต ํ ํ๋ฆฟ
02P. ๊ณตํต ํ ํ๋ฆฟ ๊ด๋ จ
์ด์ ์ฑํฐ์์ ์ง๋ฌธ ๋ฑ๋ก๊ณผ ๋ต๋ณ ๋ฑ๋ก์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค๋ฅ๋ฅผ ํ์ํ๋ค.
<div class="alert alert-danger" role="alert" th:if="${#fields.hasAnyErrors()}">
<div th:each="err : ${#fields.allErrors()}" th:text="${err}" />
</div>
์์ผ๋ก ์ถ๊ฐ์ ์ผ๋ก ๋ง๋ค ํ ํ๋ฆฟ๋ค์๋ ์์ ๊ฐ์ด ์ค๋ฅ๋ฅผ ํ์ํ๋ ๋ถ๋ถ์ด ํ์ํ๋ค. ์ด๋ ๊ฒ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฌธ์ฅ์ ๊ณตํต ํ ํ๋ฆฟ์ผ๋ก ๋ง๋ค๊ณ ํ์ํ ๋ถ๋ถ์ ์ฝ์ ํ์ฌ ์ธ ์ ์๋ค๋ฉด ํธ๋ฆฌํ์ง ์์๊น?
์ด๋ฒ ์ฅ์์๋ ์์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ ๋ถ๋ถ์ ๊ณตํต ํ ํ๋ฆฟ์ผ๋ก ์์ฑํ๊ณ ํ์ํ ๊ณณ์ ์ฝ์ ํ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ํด๋ณด์.
์ค๋ฅ ๋ฉ์์ง ๊ณตํต ํ ํ๋ฆฟ
์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ํ๋ ๊ณตํต ํ ํ๋ฆฟ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์.
ํ์ผ๋ช :
/sbb/src/main/resources/templates/
form_errors.html
<div th:fragment="formErrorsFragment" class="alert alert-danger"
role="alert" th:if="${#fields.hasAnyErrors()}">
<div th:each="err : ${#fields.allErrors()}" th:text="${err}" />
</div>
์ถ๋ ฅํ ์ค๋ฅ๋ฉ์์ง ๋ถ๋ถ์ th:fragment="formErrorsFragment"
์์ฑ์ ์ถ๊ฐํ๋ค.
์ง๋ฌธ ๋ฑ๋ก ํ ํ๋ฆฟ์ ์ ์ฉํ๊ธฐ
์ด์ ์์์ ์์ฑํ ์ค๋ฅ ๋ฉ์์ง ๊ณตํต ํ
ํ๋ฆฟ์ ์ฌ์ฉํด ๋ณด์. ๋จผ์ question_form.html
ํ์ผ์ ์ ์ฉํด ๋ณด์.
ํ์ผ๋ช :
/sbb/src/main/resources/templates/
question_form.html
<html layout:decorate="~{layout}">
<div layout:fragment="content" class="container">
<h5 class="my-3 border-bottom pb-2">์ง๋ฌธ๋ฑ๋ก</h5>
<form th:action="@{/question/create}" th:object="${questionForm}" method="post">
<div th:replace="~{form_errors :: formErrorsFragment}"></div>
<div class="mb-3">
<label for="subject" class="form-label">์ ๋ชฉ</label>
<input type="text" th:field="*{subject}" class="form-control">
</div>
<div class="mb-3">
<label for="content" class="form-label">๋ด์ฉ</label>
<textarea th:field="*{content}" class="form-control" rows="10"></textarea>
</div>
<input type="submit" value="์ ์ฅํ๊ธฐ" class="btn btn-primary my-2">
</form>
</div>
</html>
ํ์๋ฆฌํ์ th:replace
์์ฑ์ ์ฌ์ฉํ๋ฉด ๊ณตํต ํ
ํ๋ฆฟ์ ํ
ํ๋ฆฟ ๋ด์ ์ฝ์
ํ ์ ์๋ค. <div th:replace="~{form_errors :: formErrorsFragment}"></div>
์ ์๋ฏธ๋ div ์๋ฆฌ๋จผํธ๋ฅผ form_errors.html
ํ์ผ์ th:fragment
์์ฑ๋ช
์ด formErrorsFragment
์ธ ์๋ฆฌ๋จผํธ๋ก ๊ต์ฒดํ๋ผ๋ ์๋ฏธ์ด๋ค.
์ง๋ฌธ ์์ธ ํ ํ๋ฆฟ์ ์ ์ฉํ๊ธฐ
๋ต๋ณ์ ๋ฑ๋กํ๋ question_detail.html
ํ์ผ๋ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ์.
ํ์ผ๋ช :
/sbb/src/main/resources/templates/
question_detail.html
<html layout:decorate="~{layout}">
<div layout:fragment="content" class="container my-3">
<!-- (... ์๋ต ...) -->
<!-- ๋ต๋ณ ์์ฑ -->
<form th:action="@{|/answer/create/${question.id}|}" th:object="${answerForm}" method="post" class="my-3">
<div th:replace="~{form_errors :: formErrorsFragment}"></div>
<textarea th:field="*{content}" rows="10" class="form-control"></textarea>
<input type="submit" value="๋ต๋ณ๋ฑ๋ก" class="btn btn-primary my-2">
</form>
</div>
</html>
์ด๋ ๊ฒ ๋ณ๊ฒฝํ๊ณ ์ง๋ฌธ ๋ฑ๋ก๊ณผ ๋ต๋ณ ๋ฑ๋ก์ ์งํํด ๋ณด์. ์ด์ ๊ณผ ๋์ผํ๊ฒ ๋์ํ๋ ๊ฒ์ ํ์ธํ ์ ์์ ๊ฒ์ด๋ค.