Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
直接从Java模板访问DAO_Java_Templates_Jsp_Freemarker - Fatal编程技术网

直接从Java模板访问DAO

直接从Java模板访问DAO,java,templates,jsp,freemarker,Java,Templates,Jsp,Freemarker,可以从Java模板直接访问DAO吗?我想实现这样的目标 <#foreach value="eventsDao.getEvents()" as="event"> <= value="event.getName()" /> </#foreach> 我觉得把所有的东西都写到控制器上,然后再写到模板上是不必要的,这限制了重复性 另外,JSP、Freemarker和ApacheTiles之间的显著区别是什么?他们允许这样做吗?如果你真的想这样做,打破模

可以从Java模板直接访问DAO吗?我想实现这样的目标

 <#foreach value="eventsDao.getEvents()" as="event">
    <= value="event.getName()" />
 </#foreach>

我觉得把所有的东西都写到控制器上,然后再写到模板上是不必要的,这限制了重复性


另外,JSP、Freemarker和ApacheTiles之间的显著区别是什么?他们允许这样做吗?

如果你真的想这样做,打破模型-视图分离。。。有很多方法。在JSP中,您可以在
块中输入Java代码。在FreeMarker中,虽然不能插入Java块,但仍然可以调用对象和类的公共方法。调用静态方法有点棘手,因为您不能仅在语言级别上按名称访问类,还必须在模板的上下文(所谓的数据模型)中放入可以做到这一点的内容(请参阅:“访问静态方法”)。我相信Tiles在这个问题上是不相关的。

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

希望JSP和FreeMarker之间的区别是显而易见的,但简而言之,FM对于循环之类的典型视图构造具有更简洁的语法,并且允许更直接地访问函数,而无需以JSP的方式定义和公开函数

关于MVC的“浪费”:当然,你可以在视图层做任何事情——没有任何东西可以阻止你编写架构糟糕的系统,对于小型应用程序来说,这可能无关紧要。

你可以使用它来做这件事,而且它的语法也非常干净;它将如下所示:

{% for event in eventsDao.events %}
  {{ event.name }}
{% endfor %}
除此之外,我还推荐Pebble优于Velocity或Freemarker,主要是因为Pebble的最佳特性是


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

将事物划分为控制器/dao/视图层是有原因的;对于可维护性来说,在视图中具有这些类型的依赖关系通常是一个坏主意。在理想情况下,您只需将
贴图
传递给视图,这样层之间就只有最浅的依赖关系。