`

WebWork深度探索之Pitfall

阅读更多

        在使用WebWork进行开发的过程中,她的种种特性:简约为先的设计原则,IOC的实现,Interceptor的使用,Command模式的使用,利用OGNL作为其Expression Language,完备的类型转换,简便的配置以及完备的Validation都深深打动了我,让我将其列为开发Web  Application的第一framework。然而,金无足赤,强大的背后却有着或多或少的pitfall。
        首先,作为一个框架本身,它提供的文档还是不够充分的,sample也比较匮乏,而且文档中也存在与范例不一致的地方,使得学习WebWork的曲线没有想象中的那么平滑。还记得有篇文章在比较框架之间优劣的时候,文档因素是被列在第一位的。因此,增加足够充分的文档与sample,是WebWork社区的当务之急了。
        其次,也许是与Velocity紧密结合的缘故,因此WebWork在表示层做得并不好。譬如她提供的Tag Library,除了与ValueStack相关的几个标签具有一定的实用价值之外,其它的tag都让人觉得鸡肋的感觉。其实将页面上的UI元素封装成tag是一个不错的选择,但是WebWork的UI Tag做得并不出色。举个例子,<webwork:textfield>标签封装了<input type="text">,然而我却没有办法象使用<input>那样使用<webwork:textfield>,最重要的就是没有办法将CSS样式应用到她上面,如果加上class的属性的时候,tag在parse的时候就会报错。正是因为这个,我不得不弃用所有的UI标签。我想在UI上面,还得向ASP.NET多学习了。
        第三,虽然Validation框架提供了通过配置actionName-validation.xml的文件即可完成字段校验的大部分工作,但是如果某些字段的校验需要涉及数据库的查询,那么这样的方式不适用了。在类ActionSupport中定义了两个方法:addFiledError和addActionError,两者对应的参数的区别在于前者除了error message之外还需要一个参数就是field name,而后者就只有error message了。从这两个方法我们可以看出框架定义了两种层面上的错误,一种是Field级别的错误,一种是Acition级别的错误,那么我们应该将涉及数据库查询的字段级别的校验归为哪一类呢?其实,我个人认为这样的接口设计并不是最优的。首先action级别的错误也可能是由于字段不符合要求导致的,但是这样的校验需要数据库查询的支持,因此,我更加愿意让addActionError也带上field name的参数。其次,两种层面上的错误是可以统一起来的:       

addValidateError(ArrayList fieldNameList, String errorMessage);
addValidateError(String fieldName, String errorMessage);
addValidateError(String errorMessage);
               (注:方法的第一种形式是针对错误由几个字段共同引起的情况)      

        综合起来而言,我会选择将Validation写在每个action中,这样会让Validation更加集中,使用了配置文件就不可避免地将Validation分散在各处了。如果你担心代码的重复的问题,完全可以将类似的校验归并到一个Util类中,供所有的Action调用。

分享到:
评论

相关推荐

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    WebWork 是一个基于Java的开源MVC(Model-View-Controller)框架,它主要用于构建企业级的Web应用程序。WebWork1.4是该框架的一个较早版本,它为开发者提供了强大的功能,包括动作映射、数据绑定、异常处理、国际化...

    webwork之HelloWorld篇

    "webwork之HelloWorld篇"是入门WebWork框架的一个基本教程,通常包括创建一个简单的Web应用程序并展示“Hello, World!”的输出。 在Eclipse中创建一个Hello Web工程,首先你需要安装必要的插件,如JSTL和MyEclipse...

    WEBWORK

    WebWork 是一个基于 Java 的开源 MVC(Model-View-Controller)框架,它在早期的 Web 应用开发中非常流行,尤其是在 Struts 1 之前。WebWork 提供了强大的动作(Action)处理、类型转换、拦截器(Interceptor)机制...

    WebWork docs 2 -- webWork 详细的说明文档

    WebWork是一个基于Java的轻量级MVC(Model-View-Controller)框架,它为构建高性能、可维护的Web应用程序提供了强大的支持。WebWork docs 2 是一套完整的WebWork框架的详细说明文档,包含了开发者在使用WebWork时...

    WebWork2.0讲解说明

    WebWork2.0是一款基于Java的企业级Web应用框架,它为开发者提供了强大的MVC(Model-View-Controller)架构支持,旨在简化Web应用程序的开发流程,提高代码的可维护性和可扩展性。本讲解将围绕WebWork2.0的核心概念、...

    webwork的jar包

    WebWork 是一个基于Java的MVC(模型-视图-控制器)框架,它在Web应用程序开发中被广泛使用。WebWork 1 和 WebWork 2 都是该框架的不同版本,每个版本都有其特性和改进。 WebWork 1 是早期的版本,提供了基础的MVC...

    webWork

    WebWork是一个基于Java的开源MVC(模型-视图-控制器)框架,它在Web应用程序开发中扮演着重要角色。这个“webWork中文教程”旨在帮助...在实践中,不断探索和积累经验,将有助于提升个人在Java Web开发领域的专业素养。

    webwork.pdf

    WebWork 2.0与Spring框架的集成是另一个重要的方面,Spring作为Java领域最流行的依赖注入框架之一,其与WebWork的结合能够进一步增强应用的模块化和灵活性。通过Spring的依赖注入功能,可以更方便地管理和配置...

    webwork_框架文档

    WebWork是一个基于Java的MVC(Model-View-Controller)框架,它在早期的Web开发中扮演了重要的角色,尤其是在Struts之前或作为其替代品出现。WebWork提供了许多先进的特性,如动作拦截器、类型转换、强大的异常处理...

    webwork2开发指南

    WebWork2是一款基于Java的MVC(Model-View-Controller)框架,用于构建Web应用程序。在Web开发领域,它提供了一种结构化和模块化的开发方式,帮助开发者更高效地组织代码并实现业务逻辑。本指南将深入探讨WebWork2的...

    webwork

    WebWork 是一个开源的、基于Java的Web应用程序框架,它专为构建动态、交互式的Web应用而设计。这个框架的核心理念是模型-视图-控制器(MVC)架构模式,帮助开发者将业务逻辑、用户界面和数据管理分离开来,从而提高...

    Webwork2开发指南

    **Webwork2 开发指南** Webwork2 是一个基于Java的开源MVC(Model-View-Controller)框架,专门用于构建动态、交互式的Web应用程序。它提供了强大的数据绑定、动作控制、异常处理以及国际化等功能,使得开发者能够...

    webwork源码底层实现

    WebWork是一个古老的Java Web开发框架,它在早期的MVC(模型-视图-控制器)架构中占有重要地位,为开发者提供了丰富的功能和强大的动作映射能力。在深入理解WebWork源码之前,我们首先需要了解一些基本概念。 1. **...

    webwork2中文教程

    WebWork2是一个基于Java的轻量级Web应用框架,它为开发者提供了构建高效、可维护的Web应用程序的强大工具。在本教程中,我们将深入...无论你是初学者还是有经验的开发者,本教程都将是你探索WebWork2世界的理想指南。

    WebWork教程开发资料

    **WebWork教程开发资料** WebWork是一个基于Java的MVC(模型-视图-控制器)框架,用于构建Web应用程序。本教程是针对WebWork 0.90版本的初稿,涵盖了大部分章节,但未包括"实战G-Roller-WW"和"WebWork与其它开源...

    WEBWORK的源文件压缩包

    WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包

Global site tag (gtag.js) - Google Analytics