是否有可能以某種方式直接從Java模板訪問DAO?我想實現類似於直接從Java模板訪問DAO
<#foreach value="eventsDao.getEvents()" as="event">
<= value="event.getName()" />
</#foreach>
我覺得像寫一切到控制器,然後到模板是沒有必要的,限制了重複性。
此外,JSP,Freemarker和Apache Tiles之間有什麼重大區別?他們允許這個嗎?
是否有可能以某種方式直接從Java模板訪問DAO?我想實現類似於直接從Java模板訪問DAO
<#foreach value="eventsDao.getEvents()" as="event">
<= value="event.getName()" />
</#foreach>
我覺得像寫一切到控制器,然後到模板是沒有必要的,限制了重複性。
此外,JSP,Freemarker和Apache Tiles之間有什麼重大區別?他們允許這個嗎?
如果你真的想要做到這一點,打破模型視圖分離......有辦法。在JSP中,您有<%! ... %>
和<% ... %>
塊,您可以在其中輸入Java代碼。在FreeMarker中,雖然不能插入Java塊,但仍可以調用對象和類的公共方法。調用靜態方法有點棘手,因爲你不能在語言級別按名稱訪問類,但必須將某些東西放入模板的上下文(所謂的數據模型)中,才能做到這一點(請參閱: http://freemarker.org/docs/pgui_misc_beanwrapper.html#autoid_55「訪問靜態方法」)。我認爲瓷磚在這個問題上無關緊要。
關於JSP,FreeMarker,Tiles問題:Tiles是一個視圖合成框架,與JSP和FreeMarker無關,除了能夠作爲模板使用。
希望JSP和FreeMarker之間的區別很明顯,但簡而言之,FM對於典型視圖構造(如循環)具有更簡潔的語法,並且允許更直接地訪問函數而無需定義和公開函數JSP方式。
關於MVC的「浪費」:當然,您可以在視圖層做所有事情 - 沒有什麼能夠阻止您編寫體系結構不佳的系統,而對於小型應用程序,這可能無所謂。
你可以使用Pebble來做到這一點,它也有一個相當乾淨的語法;它看起來像下面這樣:
{% for event in eventsDao.events %}
{{ event.name }}
{% endfor %}
除此之外,我還建議在卵石主要是因爲這是template inheritance卵石的最大特點Velocity或者Freemarker的。
免責聲明:我是Pebble的主要作者
有一個原因,事情分成控制器/道/視圖層;在視圖中具有這些類型的依賴關係通常是可維護性的一個壞主意。在一個理想的世界中,你只能將'Map'傳遞給視圖,這樣只有層之間最淺的依賴關係。 – beerbajay 2012-02-05 16:21:54