grails应用程序根上下文

时间:2010-07-19 18:19:25

标签: grails groovy

我有一个测试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开始引用/开始?

5 个答案:

答案 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为你设置路径......

我怀疑你只是把标准标签放进......

转到

http://grails.org/doc/latest/

并且,在左侧导航栏中的标签下,查找资源和/或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扩展名吗?这样的东西)但是一般的想法是隐藏一个定义良好的标签背后的丑陋。