https://fastm.dev.java.net/servlets/ProjectDocumentList
使用方法和Fastm一樣簡單。
Fastm的使用方法是
render( fastm template, pojo model) => result
DOMPlus的使用方法
bind(DOM node, pojo model) => SAX, or DOM
domplus0.1a下載包裡麵包括,readme.txt.
所有的source, 和 test。還包括最新的還沒有正式發布的fastm source。
html , xml, result html 也都在test的source目錄下。
由於unit test case需要比較template result,所以都放到了test 的 src的資來源目錄下面。sample 也是test.
DOMPlus和Wicket一樣,採用了很少量的自訂XML Attribute。
Fastm, DOMPlus和Wicket一樣,都屬於Model Match技術 --
使用者提供一份View Model,然後Match Engine把View Model和template匹配在一起。template本身不包含任何logic,script。
所不同的是,類似於Swing,Wicket要求使用者提供一個特殊的View Model。Table, List等架構定義的資料類型。而且Wicket難以脫離Web環境使用。
Fastm, DOMPlus 不需要使用者提供特殊類型的View Model, 只需要提供POJO就可以。
POJO可以是任何Object. bean, map, DOM。
所以,對於DOMPlus來說。
DOM + DOM => DOM or SAX
XML + XML => XML
恰好是XSL的功能。XSL也是XML(XSL) + XML => XML
所不同的是,DOMPlus的XML Template是Pure HTML,所見即所得 (WYSIWYG)。HTML Template乾淨程度直追XMLC,等同或者超過Wicket(更別說Tapestry)。
用法:
Fastm Template只有2個自訂標籤。BEGIN-END 和 {}。標記動態塊和變數。
DOMPlus也是如此。針對DOM Node類型,只有3個自訂Attribute。
nodeTarge標記動態Element;attributesTarget標記動態attriburtes;textTarget標記動態text。
比如,下面這段HTML
<table border="1">
<tr nodeTarget="row">
<td bgcolor="red" attributesTarget="bgcolor=@bgcolor" nodeTarget="col" textTarget="data">grid value</td>
</tr>
</table>
和下面這段XML Data
<data>
<preface>dynamically set title</preface>
<row>
<col bgcolor="green"><data>grid 1</data></col>
<col bgcolor="yellow"><data>grid 2</data></col>
<col bgcolor="green"><data>grid 3</data></col>
</row>
<row>
<col bgcolor="yellow"><data>grid 4</data></col>
<col bgcolor="green"><data>grid 5</data></col>
<col bgcolor="yellow"><data>grid 6</data></col>
</row>
</data>
配合起來,就產生一個填充了資料行列的table。
DOMPlus和所有的基於DOM Node的技術一樣,比如XMLC等,最小的處理單位都是Node。對於希望只替換部分text的需求來說,可以引入外來的text parser engine.
比如,fastm, regular expression, velocity, freemarker等。
<a href = "http://www.domain.com/app/{id}.text"
DOMPlus的一個例子就是採用fastm作為text parser。
當然,fastm同樣可以接受DOM作為Model。
緣起:why write DOMPlus.
一位使用Fastm的程式員朋友,督促我採用Wicket Tag的方式,放棄XML Comment的標籤方式。
另一位使用Fastm的程式員朋友乾脆督促我,讓Fastm實現自訂標籤。
我正好也需要進一步改進重構fastm,提高動態include template iteration, template recursion (遞迴樹形資料需要的遞迴template)的空間和時間效率。所以,就一起改進了。
以至於,fastm能夠支援自訂如下的mark.
<p being=''block"/> // 動態塊
<span name="variable"> default value </span> // 變數
<p end ="block">
但是做到這樣,第一位朋友仍然不滿意,他希望fastm能夠達到Wicket的效果,能夠支援tag之間的嵌套層次關係。
於是我就乾脆開發了DOMPlus。把fastm的思路移植到XML DOM。
我也嘗試把DOMPlus移植到Javascript。DOM + DOM = DOM 對 Ajax來說,用起來太容易不過了。只是我的JavaScript的調試能力有限。而且重構困難。所以,寫完了,還沒有進行調試和運行。說實話,還不知道 how。以後我可能會繼續。
如果DOMPlus的JavaScript版本存在的話,可能是XSL之外的一個Ajax 處理複雜HTML Layout(尤其是多重迴圈,多重資料)的更加簡單易用的可選工具。
Java Script也有TrimPath JST等Scripted Template. 但這些template並不是Pure HTML, 可能無法直接在browser裡面顯示。
----
資料定址方式。
如果Model是POJO, 一般遵守OGNL style。
如果Model是DOM, 一般遵守XPath style。
當然,可以採用JXPath之類的工具,把對POJO的訪問也統一為XPath。