直接从Java模板访问DAO

时间:2012-02-05 12:55:43

标签: java templates jsp freemarker

是否有可能以某种方式直接从Java模板访问DAO?我想实现像

这样的东西
 <#foreach value="eventsDao.getEvents()" as="event">
    <= value="event.getName()" />
 </#foreach>

我觉得将所有内容都写入控制器,然后模板只是不必要的,并且限制了两面性。

此外,JSP,Freemarker和Apache Tiles之间有什么重大差异?他们允许这个吗?

3 个答案:

答案 0 :(得分:1)

如果你真的想这样做,打破模特 - 视图分离......有办法。在JSP中,您可以使用<%! ... %><% ... %>块来输入Java代码。在FreeMarker中,虽然您无法插入Java块,但您仍然可以调用对象和类的公共方法。调用静态方法有点棘手,因为你不能只在语言层面上按名称访问类,而是必须在模板的上下文(所谓的数据模型)中添加一些东西(参见: http://freemarker.org/docs/pgui_misc_beanwrapper.html#autoid_55“访问静态方法”)。我认为,瓷砖在这个问题上无关紧要。

答案 1 :(得分:1)

关于JSP,FreeMarker,Tiles问题:Tiles是一个视图合成框架,与JSP和FreeMarker无关,除了能够用作模板之外。

希望很明显JSP和FreeMarker之间的区别是什么,但简而言之,FM对于典型的视图结构(如循环)有更简洁的语法,并允许更直接地访问函数,而无需定义和公开函数JSP方式。

关于MVC的“浪费”:当然,你可以在视图层中做所有事情 - 没有什么能阻止你编写设计不佳的系统,对于小型应用程序,它可能并不重要。

答案 2 :(得分:0)

您可以使用Pebble执行此操作,并且语法也非常干净;它看起来如下:

{% for event in eventsDao.events %}
  {{ event.name }}
{% endfor %}

除此之外,我还推荐Pebble over Velocity或Freemarker,主要是因为Pebble的最佳功能是template inheritance

免责声明:我是Pebble的主要作者