Я пытаюсь передать действие пользовательскому тегу, но вместо простого действия я также хочу добавить строку к сгенерированному URL-адресу.
Только с действием это работает:
#{nav.menu label: 'Log In', url: @access.AccessControl.login() /}
Но #{nav.menu label: 'Log In', url: @access.AccessControl.login() + '?url=' + request.url /}
приводит к
MissingMethodException : Нет подписи метода: play.mvc.Router$ActionDefinition.plus() применимо для типов аргументов: (java.lang.String) значения: [?url=] Возможные решения: use([Ljava.lang.Object; ), split(groovy.lang.Closure), is(java.lang.Object), wait(), any(), dump().
Когда я пытаюсь #{nav.menu label: 'Log In', url: @{access.AccessControl.login()} + "?url=" + request.url /}
, он говорит #{nav.menu} is not closed}
:
Итак, я попытался
%{ loginPath = @access.AccessControl.login(); }%
#{nav.menu label: 'Log In', url: loginPath + "?url=" + request.url /}
но затем он говорит: «Шаблон /app/views/main.html не компилируется: неожиданный токен: @»
Если я сделаю это, действие не будет заменено путем:
%{ loginPath = '@{access.AccessControl.login()}' }%
#{nav.menu label: 'Log In', url: loginPath + "?url=" + request.url /}
Так что у меня совсем нет идей. Что оно хочет от меня?
Мне удалось заставить его работать, используя следующее, но похоже, что должен быть лучший способ:
#{nav.menu label: 'Log In', url: play.mvc.Router.reverse('access.AccessControl.login').url + '?url=' + request.url /}