카테고리 없음
[Thymeleaf] 타임리프 if / unless 가 작동이 안되는 경우
MoveForward
2025. 8. 1. 00:10
타임리프의 if / unless 는 조건문을 이용하여 해당 태그를 작성할지 말지를 결정해주는 기능이다.
if / unless 를 사용하였는데 기능이 올바로 작동하지 않았다.
놓친 부분에 대해 알아보도록 하자.
[문제 HTML]
<div class="chat-body">
<p> 메시지 개수: [[${messageList.size()}]]</p>
<th:block th:each="message : ${messageList}">
<p>
메시지 ID: [[${message.id}]] |
보낸 사람 ID: [[${message.memberId}]] |
조건문 결과: [[${#authentication.principal.id == message.memberId}]]
</p>
<div th:if="${#authentication.principal.id == message.memberId}"
th:replace="~{message-sender.html :: messageForm(message=${message})}">
</div>
<div th:unless="${#authentication.principal.id == message.memberId}"
th:replace="~{message-receiver.html :: messageForm(message=${message})}">
</div>
</th:block>
</div>
[문제 해결 HTML]
<div class="chat-body">
<p> 메시지 개수: [[${messageList.size()}]]</p>
<th:block th:each="message : ${messageList}">
<p>
메시지 ID: [[${message.id}]] |
보낸 사람 ID: [[${message.memberId}]] |
조건문 결과: [[${#authentication.principal.id == message.memberId}]]
</p>
<div th:if="${#authentication.principal.id == message.memberId}">
<div th:replace="~{message-sender.html :: messageForm(message=${message})}"></div>
</div>
<div th:unless="${#authentication.principal.id == message.memberId}">
<div th:replace="~{message-receiver.html :: messageForm(message=${message})}"></div>
</div>
</th:block>
</div>
위 두가지의 차이점은 다음과 같다.
1. th:if / th:unless 와 th:replace 가 같은 태그에 함께 사용
2. th:if / th:unless 와 th:replace 를 별개의 태그로 분리하여 사용
첫번째 와 같이 "th:if / th:unless 와 th:replace 가 같은 태그에 함께 사용" 된다면 조건문에 상관 없이 모든 th:replace가 생성된다.