<div class="alert alert-danger" role="alert" th:if="${#fields.hasAnyErrors()}">
<div th:each="err : ${#fields.allErrors()}" th:text="${err}" />
</div>
오류메세지를 출력할 때 위와 같은 코드를 사용한다.
반복적인 코드를 사용할 땐 공통템플릿으로 만들고 필요한 부분에 삽입하여 사용할 수 있다.
<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"
속성을 추가했다.
th:fragment
를 이용해 조각화하였고 이름은 formErrorsFragment
로 설정하였다.
<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>
✅ 수정 전 :
<div class="alert alert-danger" role="alert" th:if="${#fields.hasAnyErrors()}">`
<div th:each="err : ${#fields.allErrors()}" th:text="${err}" />
</div>
✅ 수정 후 : <div th:replace="~{form_errors :: formErrorsFragment}"></div>
타임리프의 th:replace
속성을 사용하면 공통 템플릿을 템플릿 내에 삽입할수 있다. div 엘리먼트를 form_errors.html
파일의 th:fragment
속성명이 formErrorsFragment
인 엘리먼트로 교체하라는 의미이다.
<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>
✅ 수정 전 :
<div class="alert alert-danger" role="alert" th:if="${#fields.hasAnyErrors()}">`
<div th:each="err : ${#fields.allErrors()}" th:text="${err}" />
</div>
✅ 수정 후 : <div th:replace="~{form_errors :: formErrorsFragment}"></div>