Мне неприятно это говорить, но я также не могу воспроизвести это. Я создал тестовый проект с одним контроллером (с именем Hello), используя ваш код для создания действия, которое не выполняет ничего, кроме перенаправления:
HelloController.groovy
package test1
class HelloController {
def index() {
def model = [:]
model.content = 'content...'
model
}
def redir() {
String partialUrl = createLink(mapping: 'helloworld') // returns `/hello/world`
redirect(uri: partialUrl) // INCORRECTLY redirects to
// `http://mysite.com/foobar/hello/world`
// instead of `http://mysite.com/hello/world`
}
}
Я создал индексную страницу index.gsp в views / hello
index.gsp
<h1>index.gsp</h1>
<html>
<body>
<p>This data is coming from the model:</p>
<p>content: ${content}</p>
</body>
</html>
Настройте helloworld в UrlMappings для сопоставления с действием index контроллера hello:
UrlMappings.groovy
class UrlMappings {
static mappings = {
"/helloworld"(controller: "hello", action: "index")
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/"(view:"/index")
"500"(view:'/error')
}
}
И изменил application.properties, чтобы app.context = /
application.properties
#Grails Metadata file
#Sun Nov 06 14:51:56 EST 2011
app.grails.version=2.0.0.RC1
app.context=/
app.name=test1
app.servlet.version=2.5
app.version=0.1
Когда я запускал приложение, я мог перейти на localhost: 8080 / hello, и он показал бы мой простой GSP. Я попробовал localhost: 8080 / helloworld и также получил его, как и ожидалось в соответствии с отображением. Затем я попробовал localhost: 8080 / hello / redir, и я был правильно перенаправлен на localhost: 8080 / helloworld.
Однако, если вы все еще сталкиваетесь с этой проблемой, у меня есть несколько предложений
1) Попробуйте использовать новый генератор ссылок, доступный в 2.0, вместо createLink. Это не может сделать что-то другое, но стоит попробовать: grailsLinkGenerator.link(mapping: 'helloworld')
2) Если это происходит только при перенаправлениях из контроллеров, вы можете просто добавить часть http://mysite.com в partUrl.
3) В крайнем случае, напишите фильтр, прикрепленный к afterView, который выполняет поиск по регулярному выражению и заменяет содержимое для mysite.com/foobar. Не уверен, что это перехватит перенаправления, но если что-то случится, я бы предположил, что так оно и будет, поскольку фильтры могут применяться на широком уровне.