2012-04-01 68 views
0

我想在grails應用程序內建立一個非常簡單的CMS功能。 基本上我在這裏嘗試的是在一個字符串中的gsp,我想從這個字符串構建gsp。CMS裏面的Grails應用程序

它可以工作,但生成的頁面沒有用主佈局進行裝飾。 此外,在其他一些嘗試中,我注意到傳遞給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

你確定要試試嗎?你見過Weceem http://www.weceem.org/ 它與Grails很好地融合在一起...... – 2012-04-01 19:57:38

+0

你是對的。我檢查了一下,但是我想在這裏實現的是讓這個實驗工作。在此期間,我會嘗試weceem,因爲我聽到很多很好迄今 – Luca 2012-04-01 21:47:26

回答

1

這不工作,因爲你基本上只是調用帶有字符串渲染。

在調用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(以及可能的插件集成正確)。

+0

我明白你的觀點。但在你的例子中,你可以調用渲染,因爲你的模板在文件系統上。有沒有辦法使用模板內的模板(例如來自數據庫)調用render(以及sitemesh過濾器)並將其裝飾? – Luca 2012-04-01 23:17:02

+0

欲瞭解更多信息,請參閱:我想將gsp存儲在數據庫中,並且想用佈局裝飾來渲染它。到目前爲止似乎這是不可能了... – Luca 2012-04-01 23:35:01

+0

你可能可以。查看applyLayout標記的代碼 - http://grails.org/doc/1.1/ref/Tags/applyLayout.html# - 你會看到還有額外的調用裝飾器。然而,你的裝飾鏈並沒有在gsp中設置。您可能需要將過濾器鏈中的渲染(通過攔截器或過濾器)或複製sitemesh過濾器的功能。我的解決方案爲此提供了一個簡單的解決方法。 – 2012-04-02 07:40:10

相關問題