Грааль получит военную базу с умом? - PullRequest
5 голосов
/ 15 марта 2011

Мой baseUrl равен http://localhost:8080/whatever. На других машинах это http://localhost/whatever.

Есть ли умный способ получить эту информацию без использования

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

Я пытаюсь динамически создать несколько ссылок на URL с параметризованными путями, т.е.

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

Если есть лучший способ сделать это, дайте мне знать.

Ответы [ 4 ]

7 голосов
/ 16 марта 2011

Если вы забудете, не ответили ли вы в вопросе здесь . Просто установите grails.serverURL и grails.app.context в файле конфигурации развернутой машины. Затем используйте createLink, чтобы создать URL. Или я что-то пропустил?

6 голосов
/ 10 марта 2015

Это решение не требует установки grails.serverURL:

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

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

сгенерирует:

http://HOST:PORT/APPNAME/WHATEVER

Установите URI, чтобы указать, где вы хотите в приложении. Используйте '/' для базового URL вашего приложения:

http://HOST:PORT/APPNAME/

0 голосов
/ 12 сентября 2014

Я решаю, используя createLink (action: 'index', контроллер: 'Root', params: [id: id], absolute: true)

0 голосов
/ 15 марта 2011

тег принимает параметр «absolute = true», который будет создавать URL-адрес, соответствующий параметрам serverUrl и contextPath текущей среды. Я рекомендую объединить это с именованным отображением URL для создания вашего URL.

Если вы не можете создать весь URL во время рендеринга страницы, Grails все равно может создать часть URL для вас:

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: "/a/b/$param1?/c/$param2?" {
        controller = 'myRestHandler'
    }
}
...