關於Velocity的一點看法

說明一下,我在項目中用的就是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簡潔呢?  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章