我们有一个 grails 项目,它被模板化以生成两个不同的站点。这些网站有两个不同的Frequently Asked Question
页面,但我们希望保持模板相同。我们正在考虑在问题中包含两个不同的*.groovy
文件,其中包含变量,然后将这些变量映射到 gsp 页面。或者可能是两个不同*.gsp
的文件,而正确的文件在启动时包含在内。
在尽可能多地重用代码的同时将静态内容包含到 gsp 页面中的最佳方法是什么,我将如何去做?
如果您需要更多信息,请与我们联系。
我们有一个 grails 项目,它被模板化以生成两个不同的站点。这些网站有两个不同的Frequently Asked Question
页面,但我们希望保持模板相同。我们正在考虑在问题中包含两个不同的*.groovy
文件,其中包含变量,然后将这些变量映射到 gsp 页面。或者可能是两个不同*.gsp
的文件,而正确的文件在启动时包含在内。
在尽可能多地重用代码的同时将静态内容包含到 gsp 页面中的最佳方法是什么,我将如何去做?
如果您需要更多信息,请与我们联系。
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 中使用该标签。
有点晚了,但我自己在寻找答案。虽然没有直接的方法可以在 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 文件