本GSP:
<g:link controller="book" action="show" id="5">Example</g:link>
产生此HTML:
<a href="/book/show/5">Example</a>
这与HTTP主机相关。如果您的网站在http://localhost:8080运行,那很好。
在开发过程中,应用程序通常会在http://localhost:8080/appName运行。
在这种情况下,上述链接无法使用 - 它会产生http://localhost:8080/book/show/5的绝对网址,而不是必需的http://localhost:8080/appName/book/show/5
上述GSP需要对结果锚点的href中存在的应用名称进行哪些更改?
答案 0 :(得分:3)
配置设置grails.app.context
应该等于您希望部署应用程序的上下文。如果未设置,则在默认配置中,它默认为您的应用程序名称,如http://localhost:8080/appName
。如果您要在根上下文中部署您的应用(例如http://locahost:8080/
),请将其添加到您的Config.groovy
:
grails.app.context = "/"
如果正确设置了上下文,g:link
标记生成的URL将包含控制器名称前的上下文。
答案 1 :(得分:2)
我发现meta
标记对于获取GSP文件中的信息非常有用。
例如,如果您需要应用程序名称,可以这样:
<g:meta name="app.name"/>
您可以在application.properties
文件中获取任何属性。
如果你像我一样,需要将它连接到另一个值,这是我的例子。请记住,任何标记都可以用作没有g:
命名空间的方法。例如:
<g:set var="help" value="http://localhost:8080/${meta(name:"app.name")}/help" />
Grails关于此的文档有点差,但它是here。
答案 2 :(得分:1)
对我而言,使用<g:link>
的唯一最佳理由是,如果有上下文,则会添加上下文;如果您在http://localhost:8080或http://mycoolsite.com生成,则会省略上下文 - 否则你自己将这些部分连接在一起是微不足道的。
将g:resource
与css,javascript等一起使用也是如此 - 它允许你有一个GSP无论上下文是什么都可以工作(例如'appName'),因为它在运行时被解析了。 p>
答案 3 :(得分:0)
我认为这就是grails.serverURL的用途。您在Config.groovy中定义了此配置变量,请查看configuration documentation for Grails以获取更多详细信息。
希望这有帮助!
答案 4 :(得分:0)
createLink标记会在链接中自动包含您的appname / context参数。
以下是reference doc。