К сожалению, я не смог найти простой способ сделать это. Самое простое решение, которое я мог найти, - написать быстрый тег (но это может быть связано с отсутствием опыта Groovy).
Я получил эту работу с этим кодом.
На ваш взгляд
<a class="#{activeRoute href:@Application.index(), activeClass:'active' /}" href="@{Application.index()}">My Page</a>
Затем создайте новый FastTag для 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);
}
}
}
Убедитесь, что вы добавить соответствующие импорт.
Это позволяет определить активную и неактивную класс, который немного больше, чем вы просили
Почему вы используете `еще if` вместо простой` else`? – niels 2010-12-10 12:03:42
, потому что, если inactiveStyle имеет значение null, он будет печатать нуль как стиль, и я не хочу ничего печатать, если activeStyle или inactiveStyle имеют значение null ....... Первая часть if одинакова, но вторая оценка отличается для двух операторов if – Codemwnci 2010-12-10 12:09:18