是否有可能以某种方式直接从Java模板访问DAO?我想实现像
这样的东西 <#foreach value="eventsDao.getEvents()" as="event">
<= value="event.getName()" />
</#foreach>
我觉得将所有内容都写入控制器,然后模板只是不必要的,并且限制了两面性。
此外,JSP,Freemarker和Apache Tiles之间有什么重大差异?他们允许这个吗?
答案 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的主要作者