여러 개의 대소문자가 있는 Tymleaf 스위치 문
요컨대
한 번 여러 개의 케이스 스테이트먼트에 로직을 쓴 스위치 스테이트먼트를 Tymeleaf에 넣고 싶다.
상세하게
나는 이것을 백일엽에 구현하고 싶다.
switch(status.value){
case 'COMPLETE':
case 'INVALID':
//print exam is not active
break;
case 'NEW':
//print exam is new and active
break;
}
런타임 오류로 인해 실패한 현재 심엽 코드
<div th:switch="${status.value}">
<div th:case="'COMPLETE','INVALID'">
<!-- print object is not active -->
</div>
<div th:case="NEW'">
<!-- print object is new and active -->
</div>
</div>
그러나 위의 코드는 오류로 인해 실패합니다.
org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: "'COMPLETE','INVALID'"...
메모: 위의 오류 메시지의 원인을 알고 있습니다.1개의 출력에 복수의 케이스가 있는 스위치를 실장하는 방법만 알면 된다.
실패의 원인은 첫 번째 경우 올바른 표현이 없기 때문입니다.구체적으로는
'COMPLETE','INVALID'
는 유효한 표현이 아닙니다.상태가 COMPLETE 또는 INVALID일 경우 div를 포함하려고 하는 것 같습니다.유감스럽게도, 그 조건의 마크업을 개별적으로 복제해야 한다고 생각합니다.다음 가격을 제안하겠습니다.
<!-- th:block rather than unneeded div -->
<th:block th:switch="${status.value}">
<div th:case="'COMPLETE'">
<!-- print object is not active -->
</div>
<div th:case="'INVALID'">
<!-- print object is not active -->
</div>
<div th:case="'NEW'">
<!-- print object is new and active -->
</div>
</th:block>
또는 이 경우 실제로 더 잘 작동하는 경우 th:에 의존할 수 있습니다.
<div th:if="${status.value} eq 'COMPLETE' or ${status.value} eq 'INVALID'">
<!-- print object is not active -->
</div>
<div th:if="${status.value} eq 'NEW'">
<!-- print object is new and active -->
</div>
또는 보다 간단하게:
<div th:unless="${status.value} eq 'NEW'">
<!-- print object is not active -->
</div>
<div th:if="${status.value} eq 'NEW'">
<!-- print object is new and active -->
</div>
오늘도 같은 이슈를 맞췄는데, 여기서 오브젝트는th:switch
는 Java 열거형입니다.결국 이것이 Java equals() 대 ==의 문제라는 것을 알게 되었습니다.에서th:switch
열거형 오브젝트가 있는데th:case
String 개체가 있습니다.Tymeleaf 문자열 함수를 사용하여 Enum 객체를 문자열로 변환하면 모든 것이 작동합니다.
<div th:switch="${#strings.toString(datafile.status)}">
<td th:case="'SUCCESS'" class="table-success">SUCCESS</td>
<td th:case="'FAILED'" class="table-danger">FAILED</td>
<!-- default case -->
<td th:case="*" th:text="${#strings.toString(datafile.status)}" class="table-secondary">xxx</td>
</div>
위의 예에서는 스위치를 사용하여 테이블셀에 부트스트랩 스타일을 조건부로 적용하고 있습니다.
대체 솔루션은 Java 코드로 논리를 수행하고 출력 값을 개체 속성으로 표시한 다음 Tymeleaf 템플릿에서 해당 속성을 참조하는 것입니다.다음과 같은 경우:
public String getBootstrapTableRowClassForStatus() {
Objects.requireNonNull(status);
switch (status) {
case SUCCESS:
return "table-success";
case FAILED:
return "table-danger";
case PROCESSING:
return "table-info";
default:
return "table-secondary";
}
}
그리고 나는 티멜리프를 사용한다.th:class
:
<tr th:class="${datafile.bootstrapTableRowClassForStatus}">
my page에서는 Java 객체의 my Status enum 값에 따라 테이블 행에 Bootstrap 색상 스타일이 적용됩니다.
pens-fan-69가 이 타입의 스위치에 응답했기 때문에
switch(status.value){
case 'COMPLETE':
case 'INVALID':
break;
case 'NEW':
break;
}
Tymeleaf에서만 번역할 수 있습니다.switch
스테이트먼트(유지할 경우)switch-case
구문)을 사용하여 회신하지 않습니다.if-else
<th:block th:switch="${status.value}">
<div th:case="'COMPLETE'">
<!-- print object is not active -->
</div>
<div th:case="'INVALID'">
<!-- print object is not active -->
</div>
<div th:case="'NEW'">
<!-- print object is new and active -->
</div>
</th:block>
이러한 경우 많은 HTML 코드를 복제해야 한다는 문제에 직면해 있었습니다(이 경우,COMPLETE
그리고.INVALID
를 사용하면, 이 문제를 경감할 수 있습니다.th:fragment
이렇게 재사용합니다.
<th:block th:fragment="complete-or-invalid-case">
<!-- your HTML for complete or invalid case -->
</th:block>
<th:block th:fragment="new-case">
<!-- your HTML for new case -->
</th:block>
그럼 인switch
이러한 블록을 재사용하여 코드 이중성을 줄일 수 있습니다.
<th:block th:switch="${status.value}">
<div th:case="'COMPLETE'" th:include="this :: complete-or-invalid-case"></div>
<div th:case="'INVALID'" th:include="this :: complete-or-invalid-case"></div>
<div th:case="'NEW'" th:include="this :: new-case"></div>
</th:block>
언급URL : https://stackoverflow.com/questions/29657648/thymleaf-switch-statement-with-multiple-case
'programing' 카테고리의 다른 글
Javascript 개체를 Json 문자열로 인코딩하는 중 (0) | 2023.03.04 |
---|---|
JDeveloper/SQL Developer가 자격 증명을 유지하기 위해 사용하는 암호화 기술을 아는 사람이 있습니까? (0) | 2023.03.04 |
Mongo 그룹 및 푸시: 모든 필드 푸시 (0) | 2023.03.04 |
React.createRef를 사용하는 경우 전류는 항상 null입니다. (0) | 2023.03.04 |
스프링 부트 2 및 마이크로미터를 사용하여 서비스 방법을 측정하는 방법 (0) | 2023.02.27 |