我們有一個模板化的Grails項目來生成兩個不同的站點。這些網站有兩個不同的Frequently Asked Question
頁面,但我們希望保持模板不變。我們正在考慮包含兩個不同的*.groovy
文件,其中包含變量,然後將這些變量映射到gsp頁面。或者可能是兩個不同的*.gsp
文件,並在啓動時包含正確的文件。如何將靜態內容加載到gsp頁面?
將靜態內容包含到gsp頁面的最佳方法是儘可能多地使用代碼,以及如何去做這件事?
讓我知道你是否需要更多信息。
我們有一個模板化的Grails項目來生成兩個不同的站點。這些網站有兩個不同的Frequently Asked Question
頁面,但我們希望保持模板不變。我們正在考慮包含兩個不同的*.groovy
文件,其中包含變量,然後將這些變量映射到gsp頁面。或者可能是兩個不同的*.gsp
文件,並在啓動時包含正確的文件。如何將靜態內容加載到gsp頁面?
將靜態內容包含到gsp頁面的最佳方法是儘可能多地使用代碼,以及如何去做這件事?
讓我知道你是否需要更多信息。
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/views/book/anotherView.gsp
<g:render template="bookTemplate" model="[book: myBook]" />
因此,您可以在任何需要使用您的模板的GSP中使用render
標記。
這有點晚了,但我一直在尋找答案。儘管在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
}
}