2014-01-29 26 views
1

我已經按照我的GSP:的Grails:錯誤,同時通過OAuth標籤傳遞PARAMS到控制器

<oauth:connect provider="facebook" params="[currentURL: location.protocol + '//' 
      + location.host + location.pathname]"> 
    <img src="../images/socialSites/facebook.png" alt="facebook" /> 
</oauth:connect> 

並在控制器下面的代碼:

def currentURL = params.currentURL 
println "currentURL is :"+currentURL; 

,並得到這個錯誤,頁面不顯示:

Caused by: java.lang.NullPointerException: Cannot get property 'protocol' on null object 

我讀here oauth可以接受所有的參數g:link可以接受,所以試圖發送當前網址到控制器,以便我可以在登錄成功後重定向到同一頁面。我如何使它發生?

回答

1

location.protocol/location.host/location.pathname /等。可以在JavaScript中工作,但在params映射中,只支持Groovy,並且該代碼無法訪問客戶端狀態。使用

params="[currentURL: request.scheme + '://' + request.serverName + ':' + request.serverPort + request.forwardURI]" 

代替。

+0

確定了..但嘗試了你說的,仍然當我看到html頁面的源代碼時,我看到鏈接中沒有參數:facebook

0

,因爲它不加入給​​paramsURL不能添加到paramsoauth taglibconnect標籤。

要達到您的要求創建自定義標籤認證:

class MyOauthTagLib { 

    static namespace = 'o' 

    def connect = { attrs, body -> 
    String provider = attrs.provider 
    Map params = attrs.remove('params') 

    if (!provider) { 
     throw new GrailsTagException('No provider specified for <o:connect /> tag. Try <o:connect provider="your-provider-name" />') 
    } 

    Map a = attrs + [url: [controller: 'oauth', action: 'authenticate', params: [provider: provider] + params]] 
    out << g.link(a, body) 
    } 
} 

,並在你的GSP使用它:

<o:connect provider="facebook" params="[currentURL: request.scheme + '://' + request.serverName + ':' + request.serverPort + request.forwardURI]">facebook</o:connect> 

注: -使用request@Burt Beckwith建議。您無法在此處訪問location

相關問題