2014-07-24 9 views

Antwort

3
th:if="${#strings.toString(someObject.constantEnumString) == 'ONE'}"> 
48

mit einer ENUM-Konstante zu vergleichen, verwenden Sie folgenden Code:

th:if="${day == T(my.package.MyEnum).MONDAY}" 
+1

Was ist 'T'? Könnten Sie einen Link zu den Dokumenten bereitstellen? –

+2

@ TimBüthe Dies ist der Operator für den Zugriff auf ein (statisches) Feld oder eine Methode auf Klassenebene, den Teil von SPEL (Spring Expression Language). Weitere Informationen finden Sie im Abschnitt "Typen" (http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html#expressions-types). – TachikomaGT

0

Wenn Sie Sie es so machen wollen nicht Ihre Enum in einen String in Ihrem Objekt umwandeln kann:

th:if="${#strings.defaultString(someObject.myConstant, 'DEFAULT_VALUE') == 'ONE'}" 
21

Eine weitere Möglichkeit:

th:if="${constant.name() == 'ONE'}" 

Es ist kürzer, aber macht Vergleich mit String-Darstellung, kann Probleme beim Refactoring verursachen.

+0

Dieser bekommt meine Stimme. Viel einfacher zu lesen. – ashario

6

@Nick Antwort hat einen kleinen Syntaxfehler, es fehlt eine abschließende geschweifte Klammer. Es sollte

sein
th:if="${day == T(my.package.MyEnum).MONDAY}" 
+2

Bitte posten Sie solche Informationen als Kommentar unter der Antwort, auf die Sie sich beziehen, nicht als eine andere Antwort. Schreibe eine Antwort nur, wenn sie die Frage selbst beantwortet (du kannst überlegen, ob deine Antwort zu einer richtigen Antwort umformuliert werden könnte, obwohl ich vielleicht denken würde, dass das nicht möglich ist). –

0

Ich bevorzuge Wrapper um die Enum.

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 } 
} 

Nächster Schritt ist das Hinzufügen von neuen Instanz von Wrapper in Modelle

models.add("constantsWrapper", ConstantsWrapper.instance); 

Jetzt Sie Typ sicheren Zugang in thymeleaf Vorlage auf den jeweiligen Wert von Constants haben.

th:if="${value == constantsWrapper.getONE()}" 

Ich weiß, dass diese Lösungen mehr Quellcode schreiben und ein Exemplar erstellen müssen. Vorteil ist mehr Typ sicher als Anruf T() und schreiben voll qualifizierten Namen direkt in Vorlage. Mit dieser Lösung können Sie refactorieren, ohne Ihre Vorlagen zu testen.

1

Eine andere Option ist die Verwendung der Methode name() der enum in einem Schalter. Ein Beispiel wäre:

<th:block th:switch="${imageType.name()}> 
    <span th:case="'ONE'"></span> 
    <span th:case="'TWO'"></span> 
    <span th:case="'THREE'"></span> 
    </th:block> 

Es ist vergleichbar mit einem Java-Switch swith ENUM anstelle von anderen Antworten wie ${day == T(my.package.MyEnum).MONDAY} oder ${#strings.toString(someObject.constantEnumString) == 'ONE'}, die sehr seltsam aussieht.

2

Versuchen Sie folgendes:

th:if="${ day.toString() == 'MONDAY'}" 
+1

Während dieses Code-Snippet das Problem lösen kann, erklärt es nicht, warum oder wie es die Frage beantwortet. Bitte [fügen Sie eine Erklärung für Ihren Code hinzu] (// meta.stackexchange.com/q/114762/269535), da dies wirklich zur Verbesserung der Qualität Ihres Posts beiträgt. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. ** Flaggers/Reviewer: ** [Für Code-only-Antworten wie diesen, downvote, nicht löschen!] (// meta.stackoverflow.com/a/260413/2747593) – Patrick