DOMPlus (Fastm的DOM版本) 發布

來源:互聯網
上載者:User
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。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.