看完了 WebWork 支持 Ajax 的 presentation
(http://wiki.opensymphony.com/download/attachments/2179/AJAX.ppt),感覺相當(dāng)?shù)氖?br> WebWork 對(duì)于 Ajax 的支持主要是通過引入新的 tag 來(lái)實(shí)現(xiàn)的。但是根據(jù)目前的文檔看來(lái),這幾個(gè) tag 的能力還相當(dāng)有限。這些 tag 能做幾件事情:
1、動(dòng)態(tài)刷新頁(yè)面中的某一部分。這一部分封裝在一個(gè) div 中,通過輪循方式或者事件觸發(fā)的方式來(lái)改變其內(nèi)容。理論上可以在 div 內(nèi)放入任何內(nèi)容。
2、通過一個(gè) a 超鏈接或 submit 按鈕來(lái)執(zhí)行一段 JavaScript,并且可以觸發(fā)一個(gè)事件。事件模型是由 DOJO 庫(kù)來(lái)定義的。
3、可以生成 tabbed pane,使用 tab 切換不同的內(nèi)容,也可以在切換的同時(shí)觸發(fā)一個(gè)事件。
4、還有一個(gè) tree 控件,同樣使用 WebWork 新增的 tag 來(lái)生成和配置。
目前看來(lái)基本上只能做這幾件事情。如果要做更復(fù)雜的事情,只能自己編寫 JS 代碼調(diào)用 DOJO 或者第三方庫(kù)的功能。這幾件事情都是相當(dāng)容易的 Ajax 技巧,沒有一件是必須要使用 tag 這樣丑陋的方式來(lái)實(shí)現(xiàn)的。我們來(lái)看看 WebWork 作者的一段實(shí)例代碼:
<#list categories as cat>
<#if cat.children.size > 0>
<#assign icon="plus"/>
<#else>
<#assign icon="square"/>
</#if>
<@ww.a notifyTopics="children_${cat.id}"
href="toggle.action?id=${cat.id}">
<img src="${icon}.gif"/>
</@ww.a>
[EXAMPLE CONTINUED]
</#list>
這是 WebWork 支持的一個(gè) tree 控件的一部分代碼。
在我看來(lái)這段代碼實(shí)在是難看的要死。本來(lái)我要把頁(yè)面中的邏輯,就是 behaviour 分離到獨(dú)立的 js 文件中的,現(xiàn)在又多了這么一堆服務(wù)器端的邏輯!我就是很討厭在 html 里面嵌入一大堆邏輯,無(wú)論是服務(wù)器端執(zhí)行的還是瀏覽器端執(zhí)行的。html 里面應(yīng)該只有 structure!
WebWork 使用的 Dojo 庫(kù)目前還缺少很重要的一塊——對(duì)于 DataGrid 的支持。DataGrid 是 B/S 架構(gòu)企業(yè)應(yīng)用表示層的核心組件,也差不多是開發(fā)量最大的組件。沒有對(duì)于 DataGrid 的支持,怎么看都像是個(gè)玩具。目前已經(jīng)有開源的 ActiveGrid(http://www.activegrid.com)可以做這件事情,如果熟悉 JavaScript 的話可以直接調(diào)用。
還有一個(gè)問題,WebWork 的 tag 生成的代碼中含有大量的 table,如果想用 CSS 做布局,看來(lái)是不太可能了。
怎么樣?看上去很美,Java 程序員不需要學(xué)習(xí)任何 JavaScript,全部使用 tag 就可以達(dá)到 Ajax 的效果。問題就是這個(gè)目標(biāo)是否真的現(xiàn)實(shí)。況且,還有大量根本就不喜歡使用 tag 的 Java 程序員呢?
(http://wiki.opensymphony.com/download/attachments/2179/AJAX.ppt),感覺相當(dāng)?shù)氖?br> WebWork 對(duì)于 Ajax 的支持主要是通過引入新的 tag 來(lái)實(shí)現(xiàn)的。但是根據(jù)目前的文檔看來(lái),這幾個(gè) tag 的能力還相當(dāng)有限。這些 tag 能做幾件事情:
1、動(dòng)態(tài)刷新頁(yè)面中的某一部分。這一部分封裝在一個(gè) div 中,通過輪循方式或者事件觸發(fā)的方式來(lái)改變其內(nèi)容。理論上可以在 div 內(nèi)放入任何內(nèi)容。
2、通過一個(gè) a 超鏈接或 submit 按鈕來(lái)執(zhí)行一段 JavaScript,并且可以觸發(fā)一個(gè)事件。事件模型是由 DOJO 庫(kù)來(lái)定義的。
3、可以生成 tabbed pane,使用 tab 切換不同的內(nèi)容,也可以在切換的同時(shí)觸發(fā)一個(gè)事件。
4、還有一個(gè) tree 控件,同樣使用 WebWork 新增的 tag 來(lái)生成和配置。
目前看來(lái)基本上只能做這幾件事情。如果要做更復(fù)雜的事情,只能自己編寫 JS 代碼調(diào)用 DOJO 或者第三方庫(kù)的功能。這幾件事情都是相當(dāng)容易的 Ajax 技巧,沒有一件是必須要使用 tag 這樣丑陋的方式來(lái)實(shí)現(xiàn)的。我們來(lái)看看 WebWork 作者的一段實(shí)例代碼:
<#list categories as cat>
<#if cat.children.size > 0>
<#assign icon="plus"/>
<#else>
<#assign icon="square"/>
</#if>
<@ww.a notifyTopics="children_${cat.id}"
href="toggle.action?id=${cat.id}">
<img src="${icon}.gif"/>
</@ww.a>
[EXAMPLE CONTINUED]
</#list>
這是 WebWork 支持的一個(gè) tree 控件的一部分代碼。
在我看來(lái)這段代碼實(shí)在是難看的要死。本來(lái)我要把頁(yè)面中的邏輯,就是 behaviour 分離到獨(dú)立的 js 文件中的,現(xiàn)在又多了這么一堆服務(wù)器端的邏輯!我就是很討厭在 html 里面嵌入一大堆邏輯,無(wú)論是服務(wù)器端執(zhí)行的還是瀏覽器端執(zhí)行的。html 里面應(yīng)該只有 structure!
WebWork 使用的 Dojo 庫(kù)目前還缺少很重要的一塊——對(duì)于 DataGrid 的支持。DataGrid 是 B/S 架構(gòu)企業(yè)應(yīng)用表示層的核心組件,也差不多是開發(fā)量最大的組件。沒有對(duì)于 DataGrid 的支持,怎么看都像是個(gè)玩具。目前已經(jīng)有開源的 ActiveGrid(http://www.activegrid.com)可以做這件事情,如果熟悉 JavaScript 的話可以直接調(diào)用。
還有一個(gè)問題,WebWork 的 tag 生成的代碼中含有大量的 table,如果想用 CSS 做布局,看來(lái)是不太可能了。
怎么樣?看上去很美,Java 程序員不需要學(xué)習(xí)任何 JavaScript,全部使用 tag 就可以達(dá)到 Ajax 的效果。問題就是這個(gè)目標(biāo)是否真的現(xiàn)實(shí)。況且,還有大量根本就不喜歡使用 tag 的 Java 程序員呢?