Thymeleaf에서 th:if와 th:insert를 조합하여 사용할 때의 주의
2306 단어 Thymeleaf
th:if → th:insert 순서로 동작시키고 싶다
여러 번 같은 실패를 해 버리므로 계명을 겸하여 기사에 남겨두기로 한다.
실패 사례
예를 들어, 가격이 존재하는 경우에만 특정 HTML을 삽입하려는 경우,
그만 다음과 같은 기술을 해 버린다.
productList.html<!-- 価格が空でない場合、insertする -->
<th:block th:if="${!#strings.isEmpty(price)}" th:insert="insert.html::product">
</th:block>
insert.html<div th:fragment="product">
<dt>価格</dt>
<dd th:text="${price}"></dd>
</div>
그러나 이 경우는 th:insert
→ th:if
의 순서로 평가되어 버리기 때문에 의도한 동작이 되지 않는다.
price에 대해 isEmpty로 비어 있는지 확인하고 있지만 비어 있는지 여부 관계없이 th:insert
가 실행됩니다.
속성의 판독 순서에 대해서는 공식적으로 기재한 바와 같이, 프래그먼트의 인클루드가 1번 최초로 실행된다.
해결 방법
무리하게 th:if
와 th:insert
를 1행으로 쓰지 않고, 나누어 기술하면 된다.
productList.html<!-- 価格が空でない場合、insertする -->
<th:block th:if="${!#strings.isEmpty(price)}">
<th:block th:insert="insert.html::product"></th:block>
</th:block>
이번은 th:insert
를 예로 들고 있지만 th:replace
이나 th:each
th:if
보다 우선적으로 평가되기 위해, 1행으로 조합해 이용하는 경우에 주의가 필요하다.
그 외에도, 의도한 동작이 되지 않는 경우는, 속성의 평가 순서에 대해서 Thymeleaf의 공식 페이지로부터 확인 가능하기 때문에,
평가 순서에 인식 차이가 없는지 확인하면 된다.
Reference
이 문제에 관하여(Thymeleaf에서 th:if와 th:insert를 조합하여 사용할 때의 주의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tora_oba/items/224ff932e6e6f7595fa5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<!-- 価格が空でない場合、insertする -->
<th:block th:if="${!#strings.isEmpty(price)}" th:insert="insert.html::product">
</th:block>
<div th:fragment="product">
<dt>価格</dt>
<dd th:text="${price}"></dd>
</div>
<!-- 価格が空でない場合、insertする -->
<th:block th:if="${!#strings.isEmpty(price)}">
<th:block th:insert="insert.html::product"></th:block>
</th:block>
Reference
이 문제에 관하여(Thymeleaf에서 th:if와 th:insert를 조합하여 사용할 때의 주의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tora_oba/items/224ff932e6e6f7595fa5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)