论坛首页 Java企业应用论坛

FreeMarker和Jsp的应用范围

浏览 29768 次
精华帖 (4) :: 良好帖 (2) :: 新手帖 (1) :: 隐藏帖 (2)
作者 正文
   发表时间:2009-11-20  
archangel 写道
xiaobin0530 写道
引用
、Macro,这个没有太多使用经验,就不做评论了,但是可以确定Jsp一定也能实现。
jsp还真没有办法实现

Why呢?你要说不如Macro方便我信,但是你要说一个用Java实现出来的技术用Java原始语言做不到,这个...还真有点妖怪了

的确是能实现,但是费力的程度就不太一样了,比如:
<#macro page page action >
   <form action="${action}" method="POST">
   <#if page.isFirst()>
   <#else>
   <span>
   <a href="${action}?pageNumber=${page.getPreviousPageNumber()}&pageSize=${page.getPageSize()}">上页</a>
   </span>
   </#if>
   <span>第${page.getThisPageNumber()}页</span>
   <#if page.isLast()>
   <#else>
   <span>
   <a href="${action}?pageNumber=${page.getNextPageNumber()}&pageSize=${page.getPageSize()}">下页</a>
   </span>
   </#if>
   <span>共 ${page.getLastPageNumber()} 页</span>
   <span> ${page.getPageSize()}条/页 </span>
   <input type="hidden" name="pageSize" value="30"/>
   <select name="pageNumber">
       <script>
       for(var i=1;i<=${page.getLastPageNumber()};++i){
          document.write("<option value='"+i+"'>"+i+"</option>");
       }
       </script>
   </select>
   <input type="submit" value="跳转"/>
   </form>
</#macro>

比如这是一个分页工具条,提供前一页,后一页,末页,首页,跳转页等基本功能,所有的页面使用:
<@p.page page=page action="getredo.action"/>

    就可以实现基本分页的功能,先不考虑代码的优雅型,如果不使用第三方的JSP Taglib你认为做这样一个菜单要花费多少力气,另外,即便是上面的Macro,美工稍加训练也可以修改,系统不用重启就可以看到效果,Taglib呢?会怎样~
例子是一个方面,不能代表全部,但是可以说明一些问题~

补充:page的包装Model接口定义,类似:
import java.util.List;
/**
 * 分页信息接口
 * Date: 2004-08-01
 * Time: 09:06
 *
 * @author phoenixup
 */
public interface Page<T> {
    /**
     * @return 是否是首页(第一页),第一页页码为1
     */
    public boolean isFirst();
    /**
     * @return 是否是最后一页
     */
    public boolean isLast();
    /**
     * @return 是否有下一页
     */
    public boolean hasNext();

    /**
     * @return 是否有上一页
     */
    public boolean hasPrevious();
    /**
     * @return 当前页的数据内容
     */
    public List<T> getThisPageElements();
    /**
     * @return 数据总的条目数量
     */
    public int getTotalNumberOfElements();
    /**
     * @return 当前页的首条数据的行编码
     */
    public int getFirstElementNumber();
    /**
     * @return 当前页的末条数据的行编码
     */
    public int getLastElementNumber();
    /**
     * @return 当前页编码
     */
    public int getPageNumber();
    /**
     * @return 下一页编码
     */
    public int getNextPageNumber();
    /**
     * @return 上一页编码
     */
    public int getPreviousPageNumber();
    /**
     * @return 获取最后一页页码,也就是总页数
     */
    public int getLastPageNumber();
    /**
     * @return 每一页显示的条目数
     */
    public int getPageSize();
}
0 请登录后投票
   发表时间:2009-11-20  
习惯问题,freemarker将js和css分离比较好。
拿来静态页面之后很快就可以加成动态的页面。
0 请登录后投票
   发表时间:2009-11-20  
说实话我现在把ftl但jsp在用,原来是后台set到request或者session里,然后el表达式拿出来,有逻辑jstl搞一下。

现在也是放到request里,前台也是${}这样拿,也能直接访问对象。

我也觉得是我水平不够。

macro应该是个很好得东西,不过暂时还不知道从何下手。
0 请登录后投票
   发表时间:2009-11-20  
Vstar 写道
我比较赞同楼主的观点。
之前公司的系统都是使用JSP作为模板的,半年前换成了Freemarker,感觉换了Freemarker后很多原本简单的工作变的复杂了很多。

...

对于邮件模板和生成的文档等我还是坚持用Freemaker,毕竟这些JSP模板还实现不了。


嗯,我也觉得是,文档模版部分,Freemarker是很好的选择。
0 请登录后投票
   发表时间:2009-11-20   最后修改:2009-11-20
case0079 写道

1。我说view层和业务层是能完全分离的。你可以举个反例推翻这个论断。
    比如生产车间生产了一辆汽车。他完全不需要知道销售部门如何包装推销的。

2。你只能想到这样不表示就只能这样。你应该问问别人为什么想到了呢。你觉得不能分开因为你根本分不清前台程序员和后台程序员各自需要什么


1. 什么叫“完全分离”?能做到吗?举例子可以啊,页面上某一个按钮要通过权限判断当前用户是否可见,怎么把权限逻辑完全抽离view层?就算把主体判断部分写成tag或者macro,页面上一样要调用,怎么算完全分离?

生产不需要知道销售怎么包装,但是销售能不知道生产出来的产品技术特点吗?反过来销售从市场上拿到的技术改进的反馈生产不需要知道吗?

2. 莫信神话,兄弟。做技术最忌信神话。就算有人告诉你他能,那也可能他在吹牛。美工和技术分离前边已经说了不少了,不说了。但是和你说的前后台程序员有啥关系?我有点糊涂。
0 请登录后投票
   发表时间:2009-11-20  
archangel 写道
case0079 写道

1。我说view层和业务层是能完全分离的。你可以举个反例推翻这个论断。
    比如生产车间生产了一辆汽车。他完全不需要知道销售部门如何包装推销的。

2。你只能想到这样不表示就只能这样。你应该问问别人为什么想到了呢。你觉得不能分开因为你根本分不清前台程序员和后台程序员各自需要什么


1. 什么叫“完全分离”?举例子可以啊,页面上某一个按钮要通过权限判断当前用户是否可见,怎么把权限逻辑完全抽离view层?就算把主体判断部分写成tag或者macro,页面上一样要调用,怎么算完全分离?

生产不需要知道销售怎么包装,但是销售能不知道生产出来的产品技术特点吗?反过来销售从市场上拿到的反馈技术改进的反馈生产不需要知道吗?

2. 莫信神话,兄弟。做技术最忌信神话。就算有人告诉你他能,那也可能他在吹牛。美工和技术分离前边已经说了不少了,不说了。但是和你说的前后台程序员有啥关系?我有点糊涂。


1.如果页面中判断该按钮可见不可见都算逻辑的话,那我只能说LZ想的太完美了。按钮可见不可见,是否要变灰,也只要判断Button的id是否等于某个String就可以了,哪怕这个String是一个表达式的结果,或者是一个权限码,但是UI仅仅理解为一个String。如果LZ非要把这个String理解为权限的东东,那就有点过了。

举个例子,分页展示时要判断是否是首页,是否是尾页,但是LZ不在UI中判断吗?那么这种判断是否也是什么逻辑呢?

2.美工技术分离,也就是人能分开,活儿很难分开。想让什么美工管美工的,技术管技术的,基本上都是扯淡。
0 请登录后投票
   发表时间:2009-11-20  
1。业务层返回一个flase给按钮,按钮就不显示,反之就显示。那不是一目了然的事情吗?
2。你难道没听说过井底之蛙?
0 请登录后投票
   发表时间:2009-11-20   最后修改:2009-11-20
phoenixup 写道

用Freemarker对维护成本的降低是肯定的,但是学习Freemarker的成本是要考虑的,另外比JSP的学习成本高,这个我不同意,是Taglibs也属于JSP的范畴,你觉得想用好Taglibs成本高低,或者相关的美工作何感想。

完全不让技术看HTML,完全不让美工看代码,这种极端的情况是目前我觉得不太可能的存在,任何技术都是有学习和维护成本的。

Freemarker不是用来替代JSP的,Taglib和Macro的运用也同样是要慎重的,用抽象的描述来处理业务逻辑,对美工无法View的技术,对美工都是纠结。但是,Freemarker是作为视图技术的一种选择,一种补充,同JSP是同等的,但是无论以技术本身还是以应用场景来讲,它都是不太可能取代JSP的。

    最后,你用的爽觉得开发效率高了,腰不酸了,腿不疼了,你就用~如果你觉得反而更郁闷,那就不用,有人说C好,有人说JAVA好,还有人扯Python和Perl大旗,Ruby也有不少人站脚助威,问题在与你自己,我认为C/JAVA/PYTHON都好用,Ruby/Perl不好用,恐怕会N多人用板砖狠狠地拍我。。。但是我用了真的是郁闷。。。SO,用自己喜欢的擅长的。


FreeMarker我也觉得不应该是JSP的替代品,因为我感觉它的生命周期不会比JSP长。但是FreeMarker有他的领域,比如文档生成。我的困惑更多出在为什么很多人认为他是比JSP更优的View层选择。

当有一天模版技术更新了,FreeMarker被淘汰了。而JSP依然在技术人带有些许极端主义色彩的崇尚纯粹的骂声中存在着的时候(一如JSP在这十几年中坚强存在一样),那些大规模采用FreeMarker作为View层技术的项目咋维护呢?想起来都替他们发愁...
0 请登录后投票
   发表时间:2009-11-20  
case0079 写道
1。业务层返回一个flase给按钮,按钮就不显示,反之就显示。那不是一目了然的事情吗?
2。你难道没听说过井底之蛙?

Stop,不想讨论可以多看。到此为止吧。
0 请登录后投票
   发表时间:2009-11-20  
jansel 写道

1.如果页面中判断该按钮可见不可见都算逻辑的话,那我只能说LZ想的太完美了。按钮可见不可见,是否要变灰,也只要判断Button的id是否等于某个String就可以了,哪怕这个String是一个表达式的结果,或者是一个权限码,但是UI仅仅理解为一个String。如果LZ非要把这个String理解为权限的东东,那就有点过了。

举个例子,分页展示时要判断是否是首页,是否是尾页,但是LZ不在UI中判断吗?那么这种判断是否也是什么逻辑呢?

2.美工技术分离,也就是人能分开,活儿很难分开。想让什么美工管美工的,技术管技术的,基本上都是扯淡。


OK,我的例子不算好,也说不清问题,打住不说了。回归正题,我想讨论的是FreeMarker的应用范围。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics