Я пытаюсь передать действие в пользовательский тег, но вместо простого действия я также хочу добавить строку к сгенерированному 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 =]
Возможные решения:
использовать ([Ljava.lang.Object;),
сплит (groovy.lang.Closure),
is (java.lang.Object), wait (), any (),
дамп ().
Когда я пытаюсь #{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 /}