如何将静态内容加载到gsp页面?

时间:2014-02-12 18:00:35

标签: grails gsp static-content

我们有一个grails项目,它可以生成两个不同的站点。这些网站有两个不同的Frequently Asked Question页面,但我们希望保持模板相同。我们考虑将包含变量的两个不同*.groovy文件包含在问题中,然后将这些变量映射到gsp页面。或者可能有两个不同的*.gsp文件,正确的文件在启动时包含在内。

将静态内容包含到gsp页面中的最佳方法是什么,同时尽可能多地重用代码以及如何进行此操作?

如果您需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:0)

Grails让concept of templates重用您的视图代码。例如:

*的grails-app /视图/书/ _bookTemplate.gsp *

<div class="book" id="${book?.id}">
   <div>Title: ${book?.title}</div>
   <div>Author: ${book?.author?.name}</div>
</div>

的grails-app /视图/书/ someView.gsp

<g:render template="bookTemplate" model="[book: myBook]" />

的grails-app /视图/书/ anotherView.gsp

<g:render template="bookTemplate" model="[book: myBook]" />

因此,您可以在任何需要使用模板的GSP中使用render标记。

答案 1 :(得分:0)

有点迟了但我自己也在寻找答案。虽然没有直接的方法在Grails中插入静态文件,但有多种方法可以实现。从控制器到自定义标签。自定义标记有一个代码:

import org.slf4j.Logger
import org.slf4j.LoggerFactory

class HtmlTagLib {
    // to be used in gsp like <html:render file="WEB-INF/some-static-file.txt"/>
    // file param is relative to web-app folder

    static namespace = 'html'
    private static final Logger log = LoggerFactory.getLogger(HtmlTagLib .class)

    def render = { attrs ->

        String filePath = attrs.file

        if (!filePath) {
            log.error("'file' attribute must be provided")
            return
        }
        String applicationPath = request.getSession().getServletContext().getRealPath( filePath )

        def htmlContent = new File(applicationPath).text
        out << htmlContent
    }
}

Rendering HTML files in Grails

致Dónal的信用