论坛首页 Java版

不用Velocity的十个理由 (找砖帖)

浏览 6300 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-04-14
korpton 写道
lsk 写道
而且貌似曾经有人测试过. velocity 的渲染速度好像比jsp 要快哦.


这就像有人说,C++就是比汇编见快,你相信吗????

别扯谈了.................

我说哥们. 不相信自己去测试下. 在这里 胡言乱语什么?
   
0 请登录后投票
最后更新时间:2008-04-14
支持使用vm!

1.组件是个问题,但不是决定性的吧。比如分页,你就不能在servlet里就算好,然后拿到vm里设置context然后输出?
2.貌似没有哪种预言是可以杜绝if-else的吧。实在太多if-else,说明能够再进行细分成多个处理,也就是多个vm啦。
3.没遇到过,不好下定论。不过感觉真的不管vm的事。
4.你就不能将这些常量类都放到context里?
5.为啥要new一个新类呢,所谓模板,不就是用例将变量的值匹配到预先设定的地方吗?
6.跟上面一条一样,既然是模板,为啥还要redirect呢?既然要redirect,那要这个模板干啥?
7.8. 一开始就用1.5。没用过1.4,没有发言权……
9.“velocity 中页面的变量只能是 String 型”,还是那句话,模板就应该做模板的事。它不是逻辑处理。
10.就图敲的字符少!
   
0 请登录后投票
最后更新时间:2008-04-14
现在正在学习Velocity!感觉还是挺不错的,使得我们不用再不断的Ctrl+C和Ctrl+V,而且语法简单易学。
哪位有Velocity深一层次的应用和介绍啊,给小弟介绍几个,学习学习~~
   
0 请登录后投票
最后更新时间:2008-04-14
sg552 写道
说明一下,我在项目中用的就是Velocity,可以说非常熟悉了。
文章取这个标题,只是用来吸引大家眼球的噱头 :) 

下面是让我感到困惑的几个问题,欢迎大家踊跃提出解决方案!谢谢!

1. 可用的组件太少。 分页都要自己写。 更别说类似于JSP中的 extreme component了。绝对的硬伤。

2. 用起来不方便,跟JSP一样,#if, #else 漫天飞

3. 当JVM的资源降低时,会发生无法生成正常的页面情况。最常见的是图片显示不完全。很难看。

4. 不支持常量访问。 比如某个类的常量 SomeClass.CONST1,不能直接访问,需要增加个丑陋的 getCONST1()方法,
然后在velocity-toolbox.xml(或类似名称文件)中增加一个类声明才行。
直接导致的情况是vm中几乎都是魔法数MagicNumber

5. 与JSP不同,无法支持 import,只能在toolbox 中进行引用。引用的类必须是 static 类型。 用起来就怀念JSP中随意的 new 了。

6. 需要页面自动跳转时,JSP的 response.sendRedirect...很方便。而VM则需要…… 本问题最常见于访问某个 index.xxx 时,上头提出一个自动跳转的功能。使用js来跳转速度又非常慢,所以只能求__助于JSP。(或者写个 *.do 或者 *.view,用servlet中的response 进行跳转)

7. Velocity1.4 与1.5 所支持的东西不同。前者不支持SET,MAP,如果参考官方的文档,会让人死都不知道怎么死的。
另外1.4也不支持定义在单独某个VM中的Macro. 如果遇到个复杂的页面想用Macro来表示,而这个系统又属于集成阶段,
不让修改对应的macro配置文件,会非常麻烦。

8. 注释会出现BUG。在 1.4 版本中验证存在。 官方宣称的 ## 单行注释, #* *# 多行注释,都有BUG。
单行的BUG:  比如     XXXX(正常代码)  ##(注释代码)  会出问题。
比如   #*    ...  *#  多行注释时,会有出现注释无效的情况,页面会把 #* ... 一起渲染出来。
我一般都是  <!-- #* .. *# --> 这样来注释。无奈啊。

9. velocity 中页面的变量只能是 String 型。 所以当你想比较两个数字的话,还需要 a.toString().equals(b.toString())。而在JSP中仅仅  == 就可以了。也就是说,当你在VM中遇到两个变量的相等比较时出现诡异错误时,把它们toString()然后在equals()比较是肯定可以的。

10.  $var 与 <%= var %> 有区别吗? 为什么就觉得JSP不如Velocity简洁呢?


模板引擎的一个重要原则, 就是隔离业务逻辑, 所以不会提供response.sendRedirect等功能. 模板引擎通常只处理文本, 与图片无关.

可以考虑使用CommonTemplate: http://www.commontemplate.org
语法简洁(只有一个语法规则),
可以在模板中使用JSP的TagLib,
支持模块继承(对页面布局比较有利, 示例: http://www.commontemplate.org/zh/demo_extends.html),
等等.
对细节也有较多处理, 如:
支持char与String比较: 假设: char ch = 'A', String str = "A" 则 $if{ch == str} 成立.
$for{10}表示迭代10次.
$break{name == null} 代替 $if{name == null} $break $end 的写法.
等等.
   
0 请登录后投票
最后更新时间:2008-04-15
绝对支持VM,就是因为它“快”(包括开发速度与运行速度)
   
0 请登录后投票
最后更新时间:2008-04-15
同为墨板技术,VM和jsp没有谁会理论上速度更快,这不是比较的切入点。

jsp编译成class,没有cache,一般会比vm慢些,但是server vendor不会做优化?

out.println()用的是stream,不会比stringbuffer慢。
   
0 请登录后投票
最后更新时间:2008-04-15
没太用过vm,一般用freemarker.不过看楼主的几个问题,好像不关模板的事情,应该是架构上的错误。
如:

分页问题 这个东西本来就不应该方到显示层算的,应该是业务层算好了,传递给显示层,显示层直接渲染就行了。

重定向问题 这个事情也不是显示层处理的,不然要controller层作啥?你别说你用vm的时候,没有controller层啊。
   
0 请登录后投票
最后更新时间:2008-04-15
模板就是为了少做重复工作,选择那个,用了都会觉得有问题,不然 也不会出来那么多模板引擎了
   
0 请登录后投票
最后更新时间:2008-04-15
Velocity 的模板缓存机制有bug,很容易引起内存泄漏。
   
0 请登录后投票
最后更新时间:2008-04-16
xyz20003 写道
velocity里不能像freemarker那样调用taglib哦。
可freemarker里的null异常也是个麻烦。freemarker还不支持map和1 == 1 ? 1 : 2的形式。要是freemarker再完美一点儿就好了。


null异常好像可处理。且可定义显示模式。
而且程序逻辑正常是不会出现这种提示的。
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐