将操作和附加字符串传递给Play中的标记

时间:2011-03-24 15:29:10

标签: tags playframework

我正在尝试将操作传递给自定义标记,但我不想仅仅使用裸操作,而是还要在生成的网址中附加字符串。

只需采取行动即可:

#{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),   是(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 个答案:

答案 0 :(得分:3)

您可以使用.add(paramName,paramValue)传递url参数

例如,我将像这样定义我自己的锚标记

视图/标签/ 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>

答案 1 :(得分:0)

你试过吗

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