`
flashroom
  • 浏览: 5682 次
  • 性别: Icon_minigender_2
  • 来自: 济南
最近访客 更多访客>>
社区版块
存档分类
最新评论

拒绝XML,让STRUTS2支持易用的表单验证

阅读更多

本以为struts2的验证框架可以抛开struts1.x的验证鸡肋,没想到一样不尽如人意,仍然要搞N多XML配置来配置去。。。十分影响开发效率。索性把以前用过的超级表单验证JS拿来用。
 
JS的代码我就不贴了,附件带着(不是我写的,拿来主义。。。)----很强大,通过正则表达式默认支持几乎所有的表单元素,这样还不够,我们还可以自己写正则表达式来让它验证。。。SO。。。几乎能满足您的任何需求,太强大了 :D
 
FE:

java 代码
  1. 〈 input "Name" dataType="Chinese" msg="真实姓名只允许中文">  


======================================================================
 
但是这个JS需要很多额外的属性来支持,比如上面的 dataType 和 msg 。这难不倒我们,只要我们在STRUTS的UI标签里面加上一个属性,让STRUTS不解析这个属性直接把属性里的内容原样输出就能满足我们的需求。
 
FE:

java 代码
  1. 〈s:textarea name="chat.code" cdata=" require='false' dataType='Chinese'  msg='只允许中文"  label="code"/>  

只要让STRUTS标签解析别的属性,原样输出 cdata 属性即可。

======================================================================

让我们开始改造吧,很简单:先下个STRUTS2原码,把STRUTS2 JAR包用RAR解开里面的TLD和template下面会用到。

第一步:在struts-tags.tld中所有UI标签里加上 cdata 属性。--这个文件在JAR包的META-INF目录下

xml 代码
  1. <attribute>  
  2.   <name> cdata name>  
  3.   <required>falserequired>  
  4.   <rtexprvalue>truertexprvalue>  
  5.   <description>description>  
  6. attribute>  

  第二步:在BEAN里加上这个属性,需要改造的文件有两个
1)org.apache.struts2.components. UIBean.java

java 代码
  1.     //这个类是所有UI BEAN的父类,改了这个类所有的UI就都具有CDATA这个属性了。   
  2.     //设置属性   
  3. protected String cdata;   
  4.     public void setCdata(String cdata) {   
  5.         this.cdata = cdata;   
  6.     }   
  7.    //在evaluateParams方里中加上这段,把CDATA加到模板参数里面 。evaluateParams 方法会在标签 doEndTag 时被调用(end方法),目的是把所有存在的属性放到一个 LinkedHashMap 中,最后由 freemarker 解析出相应的HTML代码。   
  8.     if (cdata != null) {   
  9.        addParameter("cdata", findString(cdata));   
  10. }  


2)org.apache.struts2.views.jsp.ui. AbstractUITag.java 

java 代码
  1. //这个类是所有UI标签的父类,只要改了这个类那所有的UI标签就都能读到cdata这个属性了。   
  2. //同样的,加入 cdata 属性   
  3. protected String cdata;   
  4.     public void setCdata(String cdata) {   
  5.     this.cdata = cdata;   
  6. }     
  7. //在 populateParams 方法里加上下面这小句。 populateParams 方法在标签 doStartTag 时被调用。 可以看一下 ComponentTagSupport 这个类--- AbstractUITag的父类 。   
  8. uiBean.setCdata(cdata);   

 把新改的两个类和struts-tags.tld覆盖过去然后重新打包,当然最简单的是用RAR打开STRUTS的JAR包直接把这3个文件按目录覆盖过去。
好了,经过上面这两步STRUTS就能识别CDATA标签,并能读取这个标签数据把数据放到MAP中等待freemarker 来解析了。
 
第三步:创建自己的模板
 在classes 下建立 template 目录,再在下面建 mytheme 目录。
1) 加入 theme.properties 文件 文件内容 :

java 代码
  1. parent = simple   

(这个就不多解释了,网上资料很多)
2) 加入response-cdata.ftl ,用来原样输出cdata,很简单,文件内容:

java 代码
  1. <#if parameters.cdata?exists>   
  2.  ${parameters.cdata} <#rt/>   
  3. if>  

 3)重写UI标签(其实也不是重写,只是把SIMPLE目录下的标签拿过来改该:)),以textarea标签为例。STRUTS 模板的 simple 目录下把textarea.ftl文件拷到我们的 mytheme 目录下打开。找个合适的位置(这个应该会找吧) 把这句
 <#include "/${parameters.templateDir}/mytheme/response-cdata.ftl" /> 加上就OK啦。

======================================================================

大功告成啦,赶快测试一下,别忘了在JSP里引用一下 js(也可以改一下 head.ftl。。。),也别忘了指定使用mytheme模板(也可以建立struts. Properties把默认模板改成mytheme)

分享到:
评论
2 楼 xiaoxiaodi5834 2007-09-12  
还不如自己写一些Struts标签来实现,更好用,而且可以移植到其它项目中。
常用的text和textarea有就可以了。
1 楼 sinoly 2007-09-12  
你说的这些功能,实际上在zk、jsf里面都有,甚至mootools里面也有,完全没有必要重写

相关推荐

    struts1和struts2的区别(详细)

    - **Struts2**: Struts2采用了更加灵活的验证机制,除了支持传统的ActionForm验证方式外,还引入了XWork验证框架,支持更为复杂的验证规则定义。这种方式使得验证逻辑可以独立于业务逻辑之外,提高了代码的可读性...

    原创struts2讲义2.pdf

    在表单处理方面,Struts2支持多种高级技巧,如自动填充表单字段、动态生成表单元素等。 ##### 4.4 Struts2的扩展与定制 为了满足不同的开发需求,Struts2允许开发者对其进行扩展和定制。这包括自定义拦截器、结果...

    STRUTS2优缺点

    - **更丰富的表单支持:**STRUTS2 提供了更强大的表单和数据绑定机制,包括对动态类型的表单数据的支持。 - **支持多种数据源:**除了传统的 Action Form,STRUTS2 还支持 ModelDriven 和 POJO 数据源。 **5. ...

    15年9月传智播客视频struts2

    - **Struts2提供了一组丰富的表单标签**,如`&lt;s:textfield&gt;`、`&lt;s:password&gt;`、`&lt;s:submit&gt;`等,这些标签可以自动绑定模型属性、验证数据、生成错误消息等。 #### 6. Struts2的文件上传与下载 - **文件上传**:...

    简单且强大的js表单验证框架

    5. **与Struts框架的比较**:Struts的验证机制基于XML配置,可能需要较多的设置工作。相比之下,这个js框架可能更注重简洁的API和JSON配置,减少开发者的工作量。 6. **中文文档和支持**:对于中文开发者来说,有...

    Struts2 框架概述

    - **配置简化**:Struts2支持基于注解的配置,减少了XML配置的负担。 - **性能优化**:Struts2对性能进行了优化,提高了并发处理能力。 - **易用性提升**:提供了更多内置标签和插件,简化了开发过程。 #### 四、...

    starting struts2 online.pdf

    - **易用性**:Struts2简化了许多常见的Web开发任务,如表单处理、文件上传、异常处理等,使开发者能够专注于业务逻辑的实现,而不是繁琐的框架配置。 - **社区支持**:Struts2有一个活跃的社区,提供了丰富的文档、...

    Struts2学习笔记

    根据给定的文件信息,以下是对Struts2学习笔记中...总之,Struts2.x是基于MVC模式的一个高度灵活、易用的Java Web开发框架,通过一系列的技术创新,极大地简化了Web应用的开发过程,同时也提升了应用的性能和可维护性。

    struts2 知识点

    - **易用性**:Struts2的表单标签库和拦截器机制极大地简化了Web开发过程。 - **可扩展性**:Struts2的设计允许轻松地扩展和集成其他框架,如Spring和Hibernate。 - **社区支持**:作为Apache项目的一部分,Struts2...

    struts2框架下的文件上传

    Struts2框架是Java Web开发中的一个流行MVC(Model-View-Controller)框架,它提供了丰富的功能,包括处理表单提交、文件上传等。在Struts2中,文件上传是一个常见的需求,可以帮助用户从客户端上传文件到服务器。...

    struts2标签库

    此外,Struts2还提供了Ajax标签,用于支持异步JavaScript和XML的交互,增强用户体验。 ValueStack是Struts2框架中的核心概念,它是一个对象栈,包含了Action对象、模型对象以及不同作用域的固定名称对象(如#...

    struts1&struts2

    1. **配置方式**: Struts1主要通过XML配置,而Struts2支持XML和注解混合配置,更易用且灵活。 2. **拦截器**: Struts2引入拦截器,使得业务逻辑和控制流程更易于分离。 3. **视图表示**: Struts2使用OGNL作为表达式...

    Struts2轻松入门,Struts2总结

    2. **配置方式**:Struts1.x主要依赖XML配置,而Struts2支持XML和注解混合配置,更加灵活。 3. **数据绑定**:Struts1.x的数据绑定相对复杂,需要手动设置属性,Struts2使用OGNL简化了这一过程。 4. **异常处理**...

    Struts2笔记

    Struts2支持多种结果类型,它们决定了Action执行后页面的流转方向。常见的几种结果类型包括: 1. **SUCCESS**:表示操作成功,通常转向另一个页面或者跳转到某个Action。 2. **ERROR**:表示操作失败,通常用于显示...

    struts2轻松入门

    Struts2支持使用Tiles框架进行页面布局,使视图更加模块化。 在实际开发中,Struts2的拦截器(Interceptors)扮演着重要角色。拦截器是预定义或自定义的逻辑,可以在Action执行前后运行,如日志记录、权限验证等。...

    struts2+hibernate+mysql实现注册登录

    通过实践,可以学习到Struts2的拦截器、结果类型、表单验证等特性,Hibernate的实体管理、会话工厂、查询语言(HQL)等概念,以及MySQL的基本操作和数据库设计原则。同时,还能提升对MVC模式和Java Web开发流程的...

Global site tag (gtag.js) - Google Analytics