2017-02-10 5 views
0

Der ControllerKann ich Thymeleaf-Switch-Anweisungen mit mehreren Werten verwenden?

@ControllerAdvice 
public class UserRoleAdvice { 

    private static final Logger log = LoggerFactory.getLogger(UserRoleAdvice.class); 

    @Autowired 
    UsersRepository usersRepository; 

    @ModelAttribute("currentRole") 
    public String currentRole(Principal principal, Model model) { 
     Users user = usersRepository.findOneByInitialName(principal.getName()); 
     if (user != null) { 
      log.info(user.getRole().toString()); 
      model.addAttribute("currentRole", user.getRole().toString()); 
      return user.getRole().toString(); 
     } else { 
      return "ANONYMOUS"; 
     } 
    } 
} 

ich eine Thymeleaf switch-Anweisung bin mit zu steuern, welche in der Datenbank basierend auf einem Wert auf meiner Seite angezeigt wird.

<th:block th:unless="${currentROLE} eq 'EMPLOYEE'"> 
    <a href="/login" th:href="@{/login}" class="btn-login">Log In</a> 
</th:block> 

Ich mag die Login-Seite verbergen, wenn ${currentROLE} die Zeichenfolge EMPLOYEE zeigt, oder Manager, aber es dann zeigen, wenn kein Wert für ${currentROLE} ist.

Gibt es eine Möglichkeit etwas wie diese (Pseudo-Code) zu tun?

<th:block th:unless="${currentROLE} eq 'EMPLOYEE' & || eq 'MANAGER'"> 
    <a href="/login" th:href="@{/login}" class="btn-login">Log In</a> 
</th:block> 

Oder sogar

<th:block th:unless="${currentROLE} exists> 
    <a href="/login" th:href="@{/login}" class="btn-login">Log In</a> 
</th:block> 

Antwort

2

Ja th:unless ist der richtige Weg. Aber dein Check ist falsch, denke ich. Versuchen Sie, mit:

"${currentROLE.name == 'EMPLOYEE'}" 

und/oder

"${currentROLE.name} == 'EMPLOYEE or MANAGER'" 

oder

"${currentROLE.name} == 'EMPLOYEE' or ${currentROLE.name} == 'MANAGER'" 
+0

Seltsam. Der zweite gibt mir einen verrückten Fehler: "HTTP Status 500 - Anfrage Verarbeitung fehlgeschlagen; verschachtelte Ausnahme ist org.thymeleaf.exceptions.TemplateInputException: Fehler bei der Vorlage passierte Parsen (Vorlage: „Klassenpfad Ressource [templates/home.html]“) '' – santafebound

+0

@santafebound aktualisiert Antwort. Sollte jetzt funktionieren. – Patrick

+1

Danke. Ich habe den mittleren benutzt, aber sie haben alle funktioniert. – santafebound

1

http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#switch-statements

Etwas mit drei Möglichkeiten Sie nicht wollen, kann tun, wenn/es sei denn, was mit. Das ist auch kein Schalter; Ein Schalter ist grundsätzlich Schalter (Fall, Fall, Fall ...). Dies kann mit if-Anweisungen geschehen, aber über einige Optionen hinaus sind Schalter einfacher zu lesen und zu erweitern.

In diesem Fall wäre es

<div th:switch="${currentROLE.name}"> 
    <span th:case="EMPLOYEE">stuff</span> 
    <span th:case="MANAGER">other stuff</span> 
    <span th:case="*">default stuff</span> 
</div> 

"*" zeigt den Standard Fall mehr wie

aussehen; Wenn keiner der Fälle wahr ist, geht es dahin.

Wenn die einzigen möglichen Werte EMPLOYEE, MANAGER oder nichts sind, dann sollte beachtet werden, dass jeder String, der nicht "false", "off" oder "no" ist, true ist, wenn kein Vergleich vorliegt. Also th: if = $ {currentROLE.name} wird passieren, wenn die Zeichenkette dort ist und nicht null ist, während th: es sei denn = $ {currentROLE.name} passiert, wenn es keinen Wert gibt. Dies funktioniert im Grunde wie die Wahrheit oder Falschheit, die JavaScript tut.

Die Sache ist zu überlegen, wie das Programm in Zukunft entwickeln wird als auch, was Sie beabsichtigen, hier zu tun.

+0

Gibt es einen Grund, warum Sie keine einfachen Anführungszeichen verwenden? Wie für '' '' oben? – santafebound

+1

Die Art und Weise, wie ich Thymeleaf und die Konvention, die ich verwende, gelernt habe, besteht darin, Blöcke dieser Werte in Anführungszeichen einzufügen und einfache Anführungszeichen innerhalb von Dingen zu verwenden. Ich denke nicht, dass es wichtig ist, was man macht, solange es konsistent ist und "MANAGER" und "MANAGER" sind eigentlich die gleiche Zeichenfolge. "MANAGER" und "MANAGER" bedeuten jedoch unterschiedliche Dinge. – Daveycakes

Verwandte Themen