2011-03-24 47 views
1

我試圖將一個動作傳遞給一個自定義標記,但不僅僅是裸露的動作,我還想要附加一個字符串到生成的網址。傳遞動作加附加字符串到播放中的標記

只需一個動作它的工作原理:

#{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 /} 

回答

3

可以傳遞URL參數.add(paramName,paramValue)

例如,我將定義自己的錨點t AG這樣

的意見/標籤/ 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

確實是最好的解決方案:) – mandubian 2011-03-25 20:59:53

0

你試過

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

然後我得到「沒有能夠調用動作訪問的路由。找到了AccessControl.login。」。我需要在路線文件中做任何特殊的事情來完成這項工作嗎? – 2011-03-24 21:28:12

+0

它是在路線文件中聲明的嗎?默認情況下,我擔心沒有針對您的控制器的路線(另外在包中) – mandubian 2011-03-25 07:41:54