2010-01-17 57 views
1

- 我總是使用簡單的JSP標籤和JSTL,但現在我正在尋找更多的功能和更多的可用性。從今天開始選擇合適的模板引擎

隨着谷歌搜索,我發現Freemaker,速度和瓷磚,這似乎是非常有名的。你們中的某些人是否還有其他一些經驗,並且可以簡單介紹一下。

還有其他框架值得研究嗎?

回答

3
  • Velocity是java模板引擎的老頭,它顯示了它。該設計有點脆弱(大量的靜態方法),並且有點有限且不太可擴展。它工作得很好,但是,和integrates well with Spring MVC
  • Freemarker開始Velocity停止的地方。它有更多的功能,它非常具有可擴展性,它與Spring MVC很好地集成在一起。不利的一面是,我發現模板表達語言非常奇特。
  • 瓷磚我沒有經驗,雖然與Struts的任何關聯都讓我感到可疑。

說到查看渲染,我仍然使用JSP和JSTL。儘管他們的缺點仍然存在,但在我看來,他們仍然提供最佳的選擇範圍。

當涉及到在web層的範圍之外呈現動態文本文檔(例如SMS或電子郵件模板)時,Freemarker爲我贏得了勝利。

6

在我看來,模板引擎越少越好。也就是說,您希望更少的功能,而不是更多,以促進模板的可重用性。

一個模板引擎僅提供模板引擎嚴格需要的功能,不再是StringTemplate。這不是我在生產系統中親自使用過的東西,但我正計劃要獲得下一個機會。

如果您有興趣瞭解更多關於這個主題/哲學的信息,請通過StringTemplate的創建者閱讀Enforcing Strict Model-View Separation in Templating Engines

如果你讀了該文中只有一個部分,閱讀第7章,其中包括以下規則我試着執行(使用類似JSP即使,這可以說是「太強大」引擎):

  1. 視圖無法通過直接更改模型 數據對象或通過調用導致副作用的模型的方法來修改模型。 也就是說,模板可以從模型中訪問數據 並調用方法,但這種引用必須是免費的副作用 。此規則部分產生 ,因爲數據引用必須是 對命令不敏感。參見7.1節。
  2. 視圖不能在相關的數據執行計算, 值因爲計算可能在未來 變化,他們應該 整齊封裝在模型中 任何情況下。例如,視圖不能將 計算書銷售價格作爲 「$ price * .90」。要獨立於 模型,該視圖不能對數據的含義做出假設。
  3. 視圖不能比較相關的數據值,但可以測試諸如 多值數據的值的 存在/不存在或長度數據的 性質。測試如 $血壓< 120必須移動到 模型,因爲醫生喜歡保持 降低我們的最大收縮壓 。在視圖表達式必須 替換爲 值的存在simulat-荷蘭國際集團的布爾如 $ bloodPressureOk測試!= NULL模板輸出 可以對模型數據和 的COM putations條件,條件只是 有在模型中計算。即使是 也應該在模型中計算使負值爲紅色的簡單測試; 抽象的適當水平是usu- 盟友一些更高層次的諸如 「X部門正在賠錢。」
  4. 視圖不能使數據類型的假設。某些類型的假設是 明顯,當視圖呈現數據 值是一個日期,例如,更 隱蔽型假設AP-梨:如果 模板假定$ userID是一個 整數,親語法不能 將此值更改爲模型中的非數字 而不會破壞 模板。此規則禁止索引,例如colorCode [$ topic]和 $ name [$ ID]視圖進一步不能爲 調用具有參數的方法,因爲 (靜態或動態), 是假定的參數類型,除非一個 可以保證模型方法 只是將它們視爲對象。 除了圖形設計師不是 程序員;期待他們調用 方法,並知道要通過的是 不現實。
  5. 來自模型的數據不得包含顯示或佈局信息。 該模型不能通過任何顯示 的信息僞裝成 數據值。這包括不通過 模板的名稱來應用 其他數據值。
+0

感謝您分享此文! – onigunn 2010-01-17 21:32:19

+0

選擇StringTemplate你不會感到抱歉。 – 2010-03-30 16:54:41

+0

聽到了。 [Chunk](http://www.x5software.com/chunk/wiki/)也支持這一理念,儘管你會多一些繩索,並且不要讓自己陷入困境。 – 2012-09-10 21:56:11

1

我和春天MVC隨着雙方VelocityFreeMarker工作。雖然Velocity真的是輕量級且易於使用,但它在某種程度上受到了限制。由於大型現有宏庫和JSP包含支持,我更喜歡FreeMarker進行網頁渲染。

我也推薦SiteMesh用於網頁裝飾,以避免模板文件混合內容與裝飾。所以,如果你不需要幻想AJAX頁面,結果是:Freemarker + SiteMesh + Spring MVC。但是如果你想知道是否使用AJAX,我建議你看看GWT showcase

2

如果你喜歡,你可能會喜歡Scalate,因爲它允許你使用強大的Scala表達,而不是有限的JSP/JSF/JSTL EL表達式語言Scala編程語言 - 而被完全靜態類型使模板在編輯檢查/編譯錯誤的時間。

Scalate中的Scaml模板可以讓你編寫真正適合XML/HTML的DRY模板(Rails的粉絲喜歡Haml,而Scaml是Haml的Scala端口) - 儘管如果你習慣了JSP, d可能會更好,從類似JSP的Scalate中的Ssp模板開始。