Передача действия плюс добавленная строка для тега в Play

Я пытаюсь передать действие пользовательскому тегу, но вместо простого действия я также хочу добавить строку к сгенерированному 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 /}

person Brad Mace    schedule 24.03.2011    source источник


Ответы (2)


вы можете передать параметр URL с помощью .add(paramName, paramValue)

например, я определю свой собственный тег привязки следующим образом

просмотры/теги/anchor.html

%{
action = anchor ?: _arg;
%}
#{a action}my own anchor#{/a}

и я могу использовать его как:

#{anchor @Application.newAction().add('name', 'john').add('nick', 'johnny') /}<br />

это сгенерирует следующий html

<a href="/application/newaction?nick=juancho&amp;name=juan">mi propio anchor</a>
person opensas    schedule 25.03.2011

Ты пытался

%{ url = request.url }%
#{nav.menu label: 'Log In', url: @access.AccessControl.login(url) /}
person Codemwnci    schedule 24.03.2011
comment
Затем я получаю сообщение Нет маршрута, способного вызвать доступ к действию. Был найден AccessControl.login. Нужно ли мне делать что-то особенное в файле маршрутов, чтобы это сработало? - person Brad Mace; 25.03.2011
comment
он объявлен в файле маршрутов? По умолчанию я боюсь, что нет маршрута, нацеленного на ваш контроллер (причем в пакете) - person mandubian; 25.03.2011