五月天山雪

五月天山雪,无花只有寒。笛中闻折柳,春色未曾看。晓战随金鼓,宵眠抱玉鞍。愿将腰下剑,直为斩楼兰。 ——李白《塞下曲》
posts - 8, comments - 53, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2005年11月21日

在 WebWork 对于 Ajax 支持的 presentation 中,作者说了这么一句耐人寻味的话:
AJAX is really just a bunch of JavaScript, HTML, and sloppy logic smashed together in a big train wreck!
并且作者还用粗体加重。
看不懂吗?我来翻译一下:
Ajax 其实不过是一堆 JavaScript、HTML 和膨胀的逻辑混合在一辆巨大的失事火车里面。

嘿嘿,这就是 WebWork 开发者们对于 Ajax 的看法,那么他们对于 Ajax 的支持方式也就不难理解了。
基本上,传统的 J2EE 开发者对于基于 JavaScript 的技术持有一种发自内心的轻视。他们也不相信 Java 开发人员可以写好 JavaScript —— 所以,不应该由开发人员自己来写 JavaScript,而应该由框架来自动生成 JavaScript。封装在 tag 中就成了一种非常自然的选择。

现在我要问的问题是,我们是否应该依赖这么多自动生成的 JavaScript?万一遇到了复杂的情况,这些 tag 不适用,我们是不是还是要去找到源头,修改生成 JavaScript 的代码?
更进一步,过于依赖这些自动生成的代码可能会阻碍我们采用更先进的 Web 技术。例如完全基于 CSS 的布局、structure/presentation/behaviour(分别由 XHTML/CSS/DOM 规范代表,位于 html/css/js 文件中)完全的分离以实现最大限度的页面重用。

现在 POJO 这个词相信已经深入人心,我们是否应该再考虑一下 Plain HTML、Plain JavaScript 了?

posted @ 2005-11-21 19:46 dlee 阅读(1685) | 评论 (5)编辑 收藏

看完了 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 程序员呢?

posted @ 2005-11-21 16:46 dlee 阅读(4541) | 评论 (10)编辑 收藏