我有一个测试grails应用程序设置,其上下文为“/ testapp”。当我在我的gsp中添加一个链接时,引用/它不会转到我的grails.app.context的根目录,而是转到我的grails.serverURL属性的根目录。
例如,给出一个带有href的链接“/css/main.css”
我希望这个链接实际上看起来是localhost:8080 / testapp / css / main.css而不是localhost:8080 / css / main.css
有没有办法可以从grails.app.context和grails.serverURL开始引用/开始?
答案 0 :(得分:21)
使用页面上的请求contextPath值
${request.contextPath}
然后在必要时添加其他主机信息以构建完整的URL
答案 1 :(得分:6)
问题是如何将链接添加到gsps中?
我们做的事情
<link rel="stylesheet" href="${resource(dir: 'css', file: 'stylesheet1.css')}"/>
和
<g:javascript library="prototype"/>
使用g:javascript和资源标签及方法,告诉grails为你设置路径......
我怀疑你只是把标准标签放进......
转到
并且,在左侧导航栏中的标签下,查找资源和/或javascript以获得想法(难以直接链接到文档... :()
答案 2 :(得分:6)
我有一个与OP类似的问题 - 如何让grails形成从上下文根开始而不是服务器根目录的链接?
您可以使用g:link和g:createLink标记的“uri”属性来执行此操作。例如:
<g:link uri="/login">login</g:link>
如果适用,将为任何上下文添加前缀,并生成以下内容
<a href="/login">login</a> if your app is at the http://server/
<a href="/testapp/login">login</a> if your app is at http://server/testapp/
不确定为什么它是参考文档中的undocumented属性,但我在Javadocs - ApplicationTagLib
中找到了它答案 3 :(得分:1)
您可能应该将资源标记用于grails CSS目录,如上所述。但是,您也可以使用resource
方法使用相同的标记查找Web应用程序的根上下文:
${resource(uri:'/')}
然后只要在任何地方使用该字符串。
答案 4 :(得分:0)
当谈到像样式表这样的元素时,我建议创建一个简单的标签,这样做就可以了,这些都是这样的:
class StylesTagLib {
static namespace = "g"
def stylesheet = { args, body ->
out << """<link rel="stylesheet" href="${resource(dir: 'css', file: args.href)}"/>"""
}
}
以及稍后在您的代码中使用它:
<g:stylesheet href="main.css"/>
显然你可以摆弄惯例(我应该使用预定义的文件夹吗?我应该自动添加.css扩展名吗?这样的东西)但是一般的想法是隐藏一个定义良好的标签背后的丑陋。