0

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

在尽可能多地重用代码的同时将静态内容包含到 gsp 页面中的最佳方法是什么,我将如何去做?

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

4

2 回答 2

0

Grails 有模板的概念来重用你的视图代码。例如:

*grails-app/views/book/_bookTemplate.gsp*

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

grails-app/views/book/someView.gsp

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

grails-app/views/book/anotherView.gsp

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

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

于 2014-02-12T23:29:12.803 回答
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
    }
}

感谢 Dónal在 Grails 中渲染 HTML 文件

于 2017-09-02T01:52:40.337 回答