Por desgracia, no pude encontrar una manera fácil de hacer esto. La solución más simple que pude encontrar fue escribir una etiqueta rápida (pero esto puede deberse a mi falta de experiencia en Groovy).
Esto funciona con este código.
En su opinión
<a class="#{activeRoute href:@Application.index(), activeClass:'active' /}" href="@{Application.index()}">My Page</a>
A continuación, cree un nuevo FastTag para 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);
}
}
}
Asegúrese de agregar las importaciones pertinentes.
Esto le permite especificar una clase de activo e inactivo, que es un poco más de lo que solicitó
¿Por qué se utiliza 'if' otra cosa en lugar de una sencilla' else'? – niels
porque, si inactiveStyle es nulo, imprimirá nulo como estilo, y no quiero que se imprima nada si activeStyle o inactiveStyle son nulos ....... La primera parte de if es la misma, pero la segunda la evaluación es diferente para las dos sentencias if – Codemwnci