欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DOMPlus (Fastm的DOM版本) 发布

程序员文章站 2022-05-29 21:59:52
...
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。