타임리프의 열거 상수 비교
열거할 게 있어요Constants
:
enum Constants {
ONE,TWO,THREE;
}
Thymeleaf의 열거 상수를 비교하려면 어떻게 해야 합니까?
감사해요.
열거 상수와 비교하려면 다음 코드를 사용합니다.
th:if="${day == T(my.package.MyEnum).MONDAY}"
한가지 방법:
th:if="${constant.name() == 'ONE'}"
길이는 짧지만 문자열 표현과 비교할 수 있어 리팩토링 시 문제가 발생할 수 있습니다.
또 다른 옵션은 스위치에서 열거형의 메서드 이름()을 사용하는 것입니다.예를 들면 다음과 같습니다.
<th:block th:switch="${imageType.name()}>
<span th:case="'ONE'"></span>
<span th:case="'TWO'"></span>
<span th:case="'THREE'"></span>
</th:block>
다음과 같은 다른 답변 대신 ENUM을 사용하는 자바 스위치와 유사합니다.${day == T(my.package.MyEnum).MONDAY}
아니면${#strings.toString(someObject.constantEnumString) == 'ONE'}
아주 이상하게 보이는군요
th:if="${#strings.toString(someObject.constantEnumString) == 'ONE'}">
시도해 보기:
th:if="${ day.toString() == 'MONDAY'}"
다른 답변들이 언급한 것처럼, 'T()' 메서드는 열거형의 멤버에 대한 액세스를 허용하지만 전체 패키지 경로 이름이 필요하므로 상당히 길 수 있습니다.특히 열거형을 여러 번 참조해야 하는 경우에는 이 작업이 다소 번거롭습니다.'th:with'를 사용하면 더 읽기 쉽고 유지보수가 가능합니다.
<div th:with="MyEnum=${T(my.package.MyEnum)}">
<div th:if="${day == MyEnum.MONDAY}">
<span>Happy Monday!</span>
</div>
<div th:if="${day == MyEnum.FRIDAY}">
<span>TGIF!</span>
</div>
</div>
Enum을 개체의 문자열로 변환하지 않으려면 다음과 같이 수행할 수 있습니다.
th:if="${#strings.defaultString(someObject.myConstant, 'DEFAULT_VALUE') == 'ONE'}"
저는 열거형 주변에 포장지를 사용하는 것을 선호합니다.
public class ConstantsWrapper {
public static final instance = new ConstantsWrapper();
public Constants getONE() { return Constants.ONE }
public Constants getTWO() { return Constants.TWO }
public Constants getTHREE() { return Constants.THREE }
}
다음 단계는 새로운 Wrapper 인스턴스를 모델에 추가하는 것입니다.
models.add("constantsWrapper", ConstantsWrapper.instance);
이제 각 값에 대한 타임리프 템플릿의 안전한 액세스를 입력할 수 있습니다.Constants
.
th:if="${value == constantsWrapper.getONE()}"
이 솔루션은 소스 코드를 더 많이 작성하고 인스턴스를 하나 만들어야 한다는 것을 알고 있습니다.장점은 통화보다 안전한 유형입니다.T()
그리고 템플릿에 전체 이름을 직접 적습니다.이 솔루션을 사용하면 템플릿을 테스트하지 않고도 리팩터를 수행할 수 있습니다.
덧붙이는 편입니다.isXXX()
나의 enum에 메소드:
enum Constants {
ONE,TWO,THREE;
public boolean isOne() { return this == ONE; }
public boolean isTwo() { return this == TWO; }
public boolean isThree() { return this == THREE; }
}
그럼, 만약value
를 사용할 수 있는 열거형의 인스턴스입니다.th:if="${value.one}"
.
예제 #1:
enum Constants {
ONE,
TWO,
THREE;
}
해결책:
th:if="${string == T(com.example.Constants).ONE}"
OR
th:if="${string == T(com.example.Constants).ONE.toString()}"
NB: 사용 가능.toString()
안전을 위하여
예제 #2:
enum Constants {
ONE("One"),
TWO("Two"),
THREE("Three");
}
해결책:
th:if="${string == T(com.example.Constants).ONE.toString()}"
NB: 열거형에 Description(설명)이 있으면 다음을 사용해야 합니다..toString()
.
예 #3:
enum Constants {
ONE("One"),
TWO("Two"),
THREE("Three");
}
해결책:
th:if="${'One' == T(com.example.Constants).ONE.getName()}"
NB: 열거형 설명 호출 기준.getName()
.
언급URL : https://stackoverflow.com/questions/24937441/comparing-the-enum-constants-in-thymeleaf
'programing' 카테고리의 다른 글
자바스크립트를 사용하여 창 크기가 조정될 때 탐지? (0) | 2023.09.14 |
---|---|
명령줄에서 MySQL에 연결하는 방법 (0) | 2023.09.14 |
내 to Fixed() 기능이 작동하지 않는 이유는 무엇입니까? (0) | 2023.09.14 |
NULL을 백엔드 또는 프론트엔드의 빈 문자열로 바꾸시겠습니까? (0) | 2023.09.14 |
CSS 스프라이트에서 이미지를 스케일링하려면 어떻게 해야 합니까? (0) | 2023.09.09 |