Передача действия плюс добавленная строка к тегу в Play - PullRequest
1 голос
/ 24 марта 2011

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

Ответы [ 2 ]

3 голосов
/ 25 марта 2011

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

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

views / tags / 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>
0 голосов
/ 24 марта 2011

Вы пробовали

%{ url = request.url }%
#{nav.menu label: 'Log In', url: @access.AccessControl.login(url) /}
...