我们有一个grails项目,它可以生成两个不同的站点。这些网站有两个不同的Frequently Asked Question
页面,但我们希望保持模板相同。我们考虑将包含变量的两个不同*.groovy
文件包含在问题中,然后将这些变量映射到gsp页面。或者可能有两个不同的*.gsp
文件,正确的文件在启动时包含在内。
将静态内容包含到gsp页面中的最佳方法是什么,同时尽可能多地重用代码以及如何进行此操作?
如果您需要更多信息,请与我们联系。
答案 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
}
}
致Dónal的信用