`

Webwork的表单验证及其国际化

阅读更多

     最近突然用到了Webwork的验证和国际化功能,于是翻遍了所有可以翻的地方,把心得写出来给大家分享.
  我用的是webwork2.2.2,不同版本之间会有细微的差别,但都是webwork2差别不会很大.先说一下Webwork的验证方式,webwork2.2有如下几种验证方式:
  第一种,直接在Action代码里验证.这种方式不值得推崇,因为没法复用,同时由于数据验证代码和真正业务逻辑混在一起,使程序的可读性差,但涉及到复杂的验证,这种直接的验证方式还是有它用武之地的.
  第二种,让你的Action Class继承自ActionSupport,即实现validatable接口,在你的Action Class里实现public void validate()方法,覆盖掉其父类里的validate()方法,并让你xwork里的action加入workflow Interceptor,这样此Action Class里的所有的action都会由此validate()方法验证.如果此Action Class里的某个Action不需要验证,则在其xwork配置文件中,别放入workflow Interceptor即可.但此种方法下,该Action Class里的所有的Action方法都经过相同的验证,如果需要不同的验证,则此方法不适用.
  第三种,也就是利用Xwork的验证框架来实现,需要建立ActionClassName-alias-validation.xml验证文件,但这种方式要求强制使用ww标签,不使用ww标签是不能显示错误信息来的.而ww标签通常会把你的布局搞乱,所以这种方式在下不推荐,而且网上有大量的教程介绍此种方式,所以在下这里不多描述.
  以上部分我们介绍了webwork的验证方式.下面我着重介绍一下第2种方式在实际应用中的实现,当然我们提供验证信息的国际化,即通过读取资源文件的方式来提示错误信息,而在下认为第2种方式在实际应用中更加方便,而且受限制的条件也小.下面看具体的例子:
  环境:webwork2.2.2
        工具:eclipse及propertiesEditor插件
  过程:通过访问Action返回一个Velocity的视图,在该视图显示出错误信息!
  1.写资源文件(扩展名为properties)
    资源文件名前缀要和ActionClass一致,并放于与ActionClass相同的包下,其后跟标准语言标识,假设我们的ActionClass为UserService,则建立UserService-zh-CN.properties和UserService-en-US.properties,一定要用PropertiesEditor编辑它们,代码如下:
UserService-zh-CN.properties:

java 代码
  1. error.username=请输入用户名   
  2. error.password=请输入密码  
UserService-en-US.properties:
java 代码
  1. error.username=user name is required   
  2. error.password=user password is required  

2.写UserService.java文件,代码如下:
java 代码
  1. public class UserService extends ActionSupport   
  2. {   
  3.   private IUser user;   
  4.   //action 方法,插入用户对象   
  5.   public String insert() throws Exception   
  6.   {   
  7.  //这里省略了具体业务逻辑代码   
  8.      return SUCCESS;   
  9.   }   
  10.   //重载父类里的validate()方法   
  11.   public void validate()   
  12.  {   
  13.     IUser user = this.getUser();   
  14.     String username = user.getName();   
  15.     String password = user.getPassword();   
  16.     if(usename.equals(""))   
  17.    {   
  18.       this.addFieldError("username",getText("error.username"));   
  19.    }   
  20.     if(password.equals(""))   
  21.     {   
  22.       this.addFieldError("password",getText("error.password"));   
  23.     }   
  24.  }   
  25.   //setters and getters   
  26.   
  27. }  

3.编写Xwork配置文件:
xml 代码
xml 代码
  1. <action name="insertUser" class="com.davy.UserService" method="insert">  
  2.   <result name="success" type="velocity">  
  3.     <param name="location">/success.htmparam>  
  4.   result>  
  5.   <result name="input" type="velocity">  
  6.     <param name="location">/input.htmparam>  
  7.   result>  
  8.   <interceptor-ref name="chain"/>  
  9.   <interceptor-ref name="params"/>  
  10.   <interceptor-ref name="workflow"/>  
  11. action>  
 需要注意的是workflow Interceptor一定要在Xwork.xml中声明过.
4.编写页面input.htm,注意虽然Velocity的默认扩展名为vm,但我们仍然可以改为htm,Velocity也会支持的.input.htm的代码如下:
xml 代码
  1. <form id="form1" name="form1" method="post" action="insertUser.action">  
  2.   <input name="user.name" type="text" id="user.name" />$!fieldErrors.username.get(0)   
  3.   <input name="user.password" type="text" id="user.password" />$!fieldErrors.password.get(0)   
  4.   <input type="submit" name="Submit" value="提交" />  
  5. form>  

  这样,我们的工作就完成了,接下来就可以在浏览器里测试了,如果浏览器设置为中文,则出现的提示信息问中文,如果浏览器语言设置为英语,则提示信息为英文.例子是简陋了一些,但适用于不使用ww标记的情况,希望能对有这种需要的朋友有所帮助.
分享到:
评论
13 楼 kjj 2008-04-24  
楼上我试验过了,目前我等表单都是用input 等,html表单组件做的,也没发现ww的区别在哪里
12 楼 DavyLee 2008-03-22  
引用

普通的html都可以啊。为什么说必须要ww标签呢

呵呵,你试验一下吧
11 楼 kjj 2008-03-19  
普通的html都可以啊。为什么说必须要ww标签呢
10 楼 dreamer_0924 2008-02-20  
写的不错,虽说简陋了点,但言简意赅
9 楼 dh_java 2008-02-20  
DavyLee 写道
xellos 写道
另外想请教一下楼主:
你说用到了国际化功能,我想打听一下这是个什么项目.与技术无关的,我只是想了解一下,什么样的项目有国际化需求.

  呵呵,这是做的一个运营的项目,因为项目不仅仅面向我们中国的用户,还要面向英语语种的用户,所以要用到国际化了!作为开发者,我们还是有必要了解一下国际化的!
    以上的东西写的并不完整,比较简单,我想可能除了我,象上面这种用法的可能不多.而且以上说的是验证的国际化!这只是国际化的一个方面,是代码层的;另一个重要的方面就是UI国际化了.补充一点吧,完全按照以上所描述的实现方式,UI的国际化就简单了,即可在Action返回的Velocity的视图(我的扩展名是htm,而不是vm)层写$action.getText("label.xxx")即可.这里的$action就是当前Action的实例,或者说,$action是实例化了的Action对象的reference.
   写的浅薄了些,当作抛砖引玉,有感兴趣的朋友一起交流吧!

8 楼 xiaoqiang 2007-11-30  
DavyLee 写道
yuan_2004 写道
这是在客户端验证的吧.请问:"如何在服务器验证呢?"

这已经是服务端验证了,是服务端验证的一种方式,但不是标准方式,服务端验证的标准方式是使用webwork自带的验证框架使用ActionClassName-alias-validation.xml文件的方式进行验证,但这种方式强制视图层使用ww标签显示验证的提示信息,这就要求必须使用jsp做视图,与我的初衷不吻合,所以我简单一带而过.这种标准验证方式网上有好多,在下就不重复了.



的确,这是一种服务器校验。

PS:在此谢谢楼主的这番讲解,我又重新看了下源代码,条理又明白了很多  :)
7 楼 xiaoqiang 2007-11-30  
zhao 写道
遇到一个问题:某个字段是double型,当用conversion校验时, 当填入的不是数字时都有二个这样的提示,
如何把1去掉,只留2
1.Invalid field value for field "protocol.money".
2.金额必须是数字,请重新输入。

其中,1是webwork默认提示的,2是我自己写的一个提示message,我想把默认提示去掉,如何做?


这个1的校验,是在执行你2之前做的。在你的validation interceptor之前,有一个conversionError 的拦截器,只要把这个拦截器去掉就可以了
6 楼 DavyLee 2007-11-15  
yuan_2004 写道
这是在客户端验证的吧.请问:"如何在服务器验证呢?"

这已经是服务端验证了,是服务端验证的一种方式,但不是标准方式,服务端验证的标准方式是使用webwork自带的验证框架使用ActionClassName-alias-validation.xml文件的方式进行验证,但这种方式强制视图层使用ww标签显示验证的提示信息,这就要求必须使用jsp做视图,与我的初衷不吻合,所以我简单一带而过.这种标准验证方式网上有好多,在下就不重复了.
5 楼 DavyLee 2007-11-15  
xellos 写道
另外想请教一下楼主:
你说用到了国际化功能,我想打听一下这是个什么项目.与技术无关的,我只是想了解一下,什么样的项目有国际化需求.

  呵呵,这是做的一个运营的项目,因为项目不仅仅面向我们中国的用户,还要面向英语语种的用户,所以要用到国际化了!作为开发者,我们还是有必要了解一下国际化的!
    以上的东西写的并不完整,比较简单,我想可能除了我,象上面这种用法的可能不多.而且以上说的是验证的国际化!这只是国际化的一个方面,是代码层的;另一个重要的方面就是UI国际化了.补充一点吧,完全按照以上所描述的实现方式,UI的国际化就简单了,即可在Action返回的Velocity的视图(我的扩展名是htm,而不是vm)层写$action.getText("label.xxx")即可.这里的$action就是当前Action的实例,或者说,$action是实例化了的Action对象的reference.
   写的浅薄了些,当作抛砖引玉,有感兴趣的朋友一起交流吧!
4 楼 xellos 2007-11-14  
另外想请教一下楼主:
你说用到了国际化功能,我想打听一下这是个什么项目.与技术无关的,我只是想了解一下,什么样的项目有国际化需求.
3 楼 xellos 2007-11-14  
yuan_2004 写道
这是在客户端验证的吧.请问:"如何在服务器验证呢?"



这怎么成了在客户端验证的了?
2 楼 yuan_2004 2007-11-14  
这是在客户端验证的吧.请问:"如何在服务器验证呢?"
1 楼 zhao 2007-11-06  
遇到一个问题:某个字段是double型,当用conversion校验时, 当填入的不是数字时都有二个这样的提示,
如何把1去掉,只留2
1.Invalid field value for field "protocol.money".
2.金额必须是数字,请重新输入。

其中,1是webwork默认提示的,2是我自己写的一个提示message,我想把默认提示去掉,如何做?

相关推荐

    webwork中文帮助文档

    - WebWork支持多语言环境,允许开发人员轻松地实现应用的国际化。 - 通过资源文件管理不同语言的文本,根据用户设置或浏览器信息自动选择合适的语言。 6. **异常处理**: - WebWork提供了一套完善的异常处理机制...

    WebWork 教程

    随着版本演进,WebWork经历了重大变革,最新的WebWork2.x实际上是基于Xwork构建的,Xwork作为底层核心,专注于Command模式的实现,提供了诸如拦截器机制、表单验证、类型转换、OGNL表达式语言以及IoC容器等功能。...

    webwork详细讲解.doc

    WebWork是由OpenSymphony组织开发的一款专注于组件化和代码重用的MVC模式的J2EE Web框架。该框架的核心目标是简化Web应用的开发流程并提高开发效率。当前WebWork的最新版本为2.1,值得注意的是,WebWork已经拆分为...

    webwork in action

    - **国际化**:第十四章讨论了国际化支持,包括多语言界面的实现方法。 - **最佳实践**:第十五章总结了一系列在实际开发中应遵循的最佳实践,以提高项目的可维护性和扩展性。 #### 六、附录:WebWork架构 - **...

    webwork教程很好的学习教程

    - **表单属性验证**:对用户的输入数据进行验证,确保其符合预期格式或规则。 - **类型转换**:将字符串类型的请求参数转换为所需的对象类型。 - **OGNL(Object-Graph Navigation Language)**:一种强大的表达式...

    webwork2.1 spring

    这两个框架的结合使得开发者可以利用WebWork的事件驱动模型和强大的表单验证功能,同时享受到Spring提供的服务和组件管理。 描述中的"webwork2.1 spring jar包"指的是用于集成这两个框架的特定JAR文件,它们是项目...

    Spring + hibernate + webwork + freemarker 整合配置

    3. **WebWork** 提供了强大的MVC结构,支持动作和结果的管理,以及表单验证和错误处理。 4. **FreeMarker** 作为模板引擎,允许开发者分离视图和逻辑,使前端代码更清晰、可维护。 整合这些框架可以创建出一个松...

    Webwork in action

    表单验证 - **内置验证器**:列出WebWork提供的内置验证器,并解释它们的功能。 - **自定义验证器**:演示如何编写自定义验证器来实现复杂的验证逻辑。 #### 14. 国际化 - **资源文件**:介绍如何使用资源文件来...

    webwork深入浅出

    1. **数据输入**:WebWork通过其强大的表单验证机制和OGNL表达式语言实现对请求参数的解析与绑定,从而轻松获取数据并将其转化为模型对象。 2. **输入验证**:WebWork提供了丰富的验证规则和自定义验证逻辑的支持...

    剖析 Webwork 源码.pdf

    2. **表单属性验证**:支持自动验证表单提交的数据,确保数据符合预期格式。 3. **类型转换**:能够自动将HTTP请求中的字符串转换为相应的Java类型,简化了开发者的工作。 4. **对象图导航语言(OGNL)**:一种强大...

    WebWork教程-0.90版

    **WebWork**是由**OpenSymphony**组织开发的一款面向组件化和代码重用的MVC架构的J2EE Web框架。它专注于提高开发效率并简化应用逻辑,使得开发者能够更加专注于业务逻辑的实现而非框架本身的细节。 ##### 版本迭代...

    WebWork In Action

    表单验证 - **内置验证规则**:列出WebWork提供的内置验证规则及其使用方法。 - **自定义验证器**:指导如何编写自定义验证器来检查输入数据的有效性。 #### 14. 国际化支持 - **资源文件**:介绍如何通过资源文件...

    webwork学习文档和实例

    这个“webwork学习文档和实例”压缩包包含了一系列资源,可以帮助初学者或经验丰富的开发者深入理解WebWork框架的工作原理及其用法。 首先,`webwork.doc`很可能是WebWork的官方文档,其中包含了框架的核心概念、...

    webwork+ibatis完整实例

    4. **强大的表单验证**:提供了一套完整的表单验证机制,可以方便地定义和实现验证规则。 5. **可扩展性**:WebWork允许开发者通过插件来扩展其功能,满足不同项目的需求。 **iBatis框架** iBatis是一个SQL映射...

    Java - Manning - WebWork in Action (2006)

    - **国际化支持**:为了支持多语言环境,WebWork框架提供了国际化功能。 - **实现方法**: - 创建资源文件来存储不同语言的消息。 - 在视图中使用`&lt;s:text&gt;`标签引用资源文件中的键。 - **好处**:提高应用的灵活...

    webwork学习

    它提供的核心功能包括前端拦截器(Interceptor)、运行时表单属性验证、类型转换、强大的表达式语言(OGNL)以及IoC容器等。 - **WebWork 2**:建立在Xwork之上,主要负责处理HTTP的响应和请求。它使用...

    WebWork+Spring+Hibernate整合开发网络书城 第二讲

    此外,WebWork还提供了强大的表单验证和国际化支持,使得应用更具可扩展性和易用性。 接下来是Spring框架,它是一个全面的企业级应用开发框架,提供了一系列的核心功能,如依赖注入(DI)、面向切面编程(AOP)、...

    剖析Webwork源码

    4. **学习配置与扩展**:熟悉Webwork的配置方式,掌握如何定制化框架行为,如配置拦截器链、结果类型、国际化资源等,同时探索框架的扩展点,学会编写自己的插件或自定义组件。 #### 结论 综上所述,Webwork框架...

Global site tag (gtag.js) - Google Analytics