我試圖將一個動作傳遞給一個自定義標記,但不僅僅是裸露的動作,我還想要附加一個字符串到生成的網址。傳遞動作加附加字符串到播放中的標記
只需一個動作它的工作原理:
#{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)values:[?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 /}
確實是最好的解決方案:) – mandubian 2011-03-25 20:59:53