我正在尝试在grails应用程序中构建一个非常简单的CMS功能。 基本上我在这里尝试的是在字符串中有一个gsp,我想从这个字符串构建gsp。
它可以工作,但生成的页面没有用主布局修饰。 此外,在其他一些尝试中,我注意到传递给make方法的模型被忽略。
我正在使用grails 2.0.1。
由于
class HomeController {
def groovyPagesTemplateEngine
def cms() {
def page = """<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="layout" content="main"/>
<title>CMS page using your application's main layout</title>
</head>
<body>
CMS page using your application's "main" layout.
</body>
</html>"""
StringWriter sw = new StringWriter()
PrintWriter pw = new PrintWriter(sw)
groovyPagesTemplateEngine.createTemplate(page, "somepage.gsp").make([nome: "ciao"]).writeTo(pw)
render sw
}
答案 0 :(得分:1)
这不起作用,因为你基本上只是用字符串调用render。
调用sitemesh过滤器时会应用布局。为了使其工作,您必须将sitemesh装饰器应用于您的字符串。
当我们构建类似的功能时,我们所做的就是发送相关的页面片段:
即
Mytemplate.gsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="layout" content="${layout}"/>
${head}
</head>
<body>
${body}
</body>
</html>
然后你可以打电话:
render( template: 'MyTemplate', model:[ layout: 'layout', head: '...', body: '...' ] )
这与您尝试做的事情具有相同的效果,但添加了sitemesh(并且可能正确集成了插件)。