겉바속촉
[점프투스프링부트] 2-16. 공통 템플릿 본문
728x90
반응형
점프투스프링부트 2-16
목표 : 오류 메시지를 출력하는 부분을 공통 템플릿으로 작성해두기
1. 오류 메시지 공통 템플릿
오류 메시지를 표시하는 공통 템플릿을 다음과 같이 작성하자.
[파일명:/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" 속성을 추가했다.
2. 질문 등록 템플릿에 적용하기
이제 위에서 작성한 오류 메시지 공통 템플릿을 사용해 보자.
먼저 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 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>
<div class="mb-3">
<label for="subject" class="form-label">제목</label>
<input type="text" name="subject" id="subject" class="form-control">
</div>
<div class="mb-3">
<label for="content" class="form-label">내용</label>
<textarea name="content" id="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인 엘리먼트로 교체하라는 의미이다.
3. 질문 상세 템플릿에 적용하기
답변을 등록하는 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 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 :: formErrorsFragement}"></div>
<textarea th:field="*{content}" rows="10" class="form-control"></textarea>
<input type="submit" value="답변등록" class="btn btn-primary my-2">
</form>
</div>
</html>
이렇게 변경하고 질문 등록과 답변 등록을 진행해 보자.
이전과 동일하게 동작하는 것을 확인할 수 있을 것이다.
728x90
반응형
'IT 일기 (상반기) > SPRING 기초' 카테고리의 다른 글
[점프투스프링부트] 3-02. 페이징 (0) | 2023.03.03 |
---|---|
[점프투스프링부트] 3-01. 내비게이션바 (0) | 2023.03.02 |
[점프투스프링부트] 2-15. 질문 등록과 form (0) | 2023.03.02 |
[점프투스프링부트] 2-14. 템플릿 상속 (0) | 2023.02.28 |
[점프투스프링부트] 2-13. Bootstrap (0) | 2023.02.28 |