对于 WebWork Ajax 支持的失望

看完了 WebWork 支持 Ajax 的 presentation
(http://wiki.opensymphony.com/download/attachments/2179/AJAX.ppt),感觉相当的失望。
WebWork 对于 Ajax 的支持主要是通过引入新的 tag 来实现的。但是根据目前的文档看来,这几个 tag 的能力还相当有限。这些 tag 能做几件事情:
1、动态刷新页面中的某一部分。这一部分封装在一个 div 中,通过轮循方式或者事件触发的方式来改变其内容。理论上可以在 div 内放入任何内容。
2、通过一个 a 超链接或 submit 按钮来执行一段 JavaScript,并且可以触发一个事件。事件模型是由 DOJO 库来定义的。
3、可以生成 tabbed pane,使用 tab 切换不同的内容,也可以在切换的同时触发一个事件。
4、还有一个 tree 控件,同样使用 WebWork 新增的 tag 来生成和配置。

目前看来基本上只能做这几件事情。如果要做更复杂的事情,只能自己编写 JS 代码调用 DOJO 或者第三方库的功能。这几件事情都是相当容易的 Ajax 技巧,没有一件是必须要使用 tag 这样丑陋的方式来实现的。我们来看看 WebWork 作者的一段实例代码:
<#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 支持的一个 tree 控件的一部分代码。
在我看来这段代码实在是难看的要死。本来我要把页面中的逻辑,就是 behaviour 分离到独立的 js 文件中的,现在又多了这么一堆服务器端的逻辑!我就是很讨厌在 html 里面嵌入一大堆逻辑,无论是服务器端执行的还是浏览器端执行的。html 里面应该只有 structure!

WebWork 使用的 Dojo 库目前还缺少很重要的一块——对于 DataGrid 的支持。DataGrid 是 B/S 架构企业应用表示层的核心组件,也差不多是开发量最大的组件。没有对于 DataGrid 的支持,怎么看都像是个玩具。目前已经有开源的 ActiveGrid(http://www.activegrid.com)可以做这件事情,如果熟悉 JavaScript 的话可以直接调用。
还有一个问题,WebWork 的 tag 生成的代码中含有大量的 table,如果想用 CSS 做布局,看来是不太可能了。
怎么样?看上去很美,Java 程序员不需要学习任何 JavaScript,全部使用 tag 就可以达到 Ajax 的效果。问题就是这个目标是否真的现实。况且,还有大量根本就不喜欢使用 tag 的 Java 程序员呢?

你可能感兴趣的:(对于 WebWork Ajax 支持的失望)