2011-03-15 74 views
5

我的baseUrl是http://localhost:8080/whatever。在其他機器上,它是http://localhost/whateverGrails智能地獲得戰爭baseUrl?

有一個聰明的方式來獲取這些信息,而無需使用

<% 
    String baseUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() 
%> 

我想動態創建一些鏈接路徑參數休息網址,即:

http://localhost:8080/a/b/${param1}/c/${param2}

如果有一個更好的方式來做到這一點,讓我知道。

回答

6

如果你忘記了,是不是在問題here回答。只需在您部署的機器的配置文件中設置grails.serverURLgrails.app.context即可。然後使用createLink製作網址。或者我錯過了什麼?

+0

你沒有遺漏任何東西。我知道這條道路必須在某種配置中存在。我完全錯過了Config.groovy中的這個 – 2011-03-16 13:14:26

0

<g:link>標記接受參數「absolute = true」,該參數將構建一個尊重當前環境的serverUrl和contextPath的URL。我建議將其與named URL mapping結合起來構建您的網址。

如果您無法建立在網頁渲染時間整個URL,Grails能夠仍然建立網址的一部分,您:

var url = '${g.createLink(absolute: true, mapping: "mymappingname")}/' + param1 + '/c/' + param2; 
console.log(url); // "http://localhost:8080/whatever/a/b/something/c/somethingelse" 

而且在UrlMappings.groovy:

class UrlMappings { 

name mymappingname: "https://stackoverflow.com/a/b/$param1?/c/$param2?" { 
     controller = 'myRestHandler' 
    } 
} 
+0

的鏈接參數與JavaScript,因此這種方法是行不通的。 – 2011-03-15 20:24:58

+0

然後你可以使用url作爲你的javascript網址的基礎。 – Blacktiger 2011-03-15 20:40:14

+0

這仍然行不通。/c /實際上是多個不同的動態映射,並且「/」的基本Url映射到我需要baseUrl的文件,因此命名該映射沒有任何好處。 – 2011-03-15 20:44:05

0

我解決使用建立連結(動作: '索引',控制器: '根',則params:[ID:ID],絕對的:真)

4

此解決方案不要求grails.serverURL進行設置:

<g:createLink absolute='true' uri='/WHATEVER'/>

${g.createLink(absolute:true, uri:"/WHATEVER")}

將生成:

http://HOST:PORT/APPNAME/WHATEVER

URI設置爲指向您想要在應用程序中的位置。使用'/'爲您的應用程序的基本網址:

http://HOST:PORT/APPNAME/