DOMPlus (Fastm的DOM版本) 发布


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,所见即所得。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。

你可能感兴趣的:(dom)