Malheureusement, je ne pouvais pas trouver un moyen facile de le faire. La solution la plus simple que j'ai pu trouver était d'écrire une étiquette rapide (mais ceci peut être dû à mon manque d'expérience de Groovy).
J'ai eu ce travail avec ce code.
Dans votre vue
<a class="#{activeRoute href:@Application.index(), activeClass:'active' /}" href="@{Application.index()}">My Page</a>
Ensuite, créez une nouvelle FastTag pour activeRoute
public class MyFastTag extends FastTags {
public static void _activeRoute(Map<?, ?> args, Closure body, PrintWriter out, GroovyTemplate.ExecutableTemplate template, int fromLine) {
Router.ActionDefinition actionDef = (Router.ActionDefinition) args.get("href");
String activeStyle = (String) args.get("activeClass");
String inactiveStyle = (String) args.get("inactiveClass");
if (Http.Request.current().action.equals(actionDef.action) && activeStyle != null) {
out.print(activeStyle);
}
else if (!Http.Request.current().action.equals(actionDef.action) && inactiveStyle != null) {
out.print(inactiveStyle);
}
}
}
Assurez-vous d'ajouter les importations concernées.
Cela vous permet de spécifier une classe active et inactive, ce qui est un peu plus que vous avez demandé
Pourquoi vous utilisez 'autre if' au lieu d'un simple,' else'? – niels
car, si inactiveStyle est null, il affichera null comme style, et je ne veux rien imprimer si activeStyle ou inactiveStyle sont null ....... La première partie de l'if est la même, mais la seconde l'évaluation est différente pour les deux instructions si – Codemwnci