`
k_lb
  • 浏览: 800131 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论
  • kitleer: 据我所知,国内有款ETL调度监控工具TaskCTL,支持ket ...
    kettle调度

关于Struts2中visitor校验器的解决方法

 
阅读更多

转自:http://blog.163.com/hdhr_hanxin@126/blog/static/55659922200952605033246/

首先,一般我们在提交表单的时候,对表单的各字段就要有校验的过程,实际部署过程中要分 客户端校验 和服务器端校验。 客户端校验使用rapid validation等第三方客户端校验框架就可以实现,而且比Struts2本身自带的客户端校验方式更好,但服务器端校验却可以分为好几种:


1.如果在Action中只有一个处理逻辑的话,可以重写ActionSupport中的validate()方法。


2.如果在Action中存在多个类似于execute的处理逻辑的话,我们可以重写validateXxx()方法(Xxx为不同的处理逻辑名称,例如有validateRegist()方法,就是处理Regist业务逻辑)


3.编写对应于Action的validate 的xml文件。这个应该是最为常用的一种解决方案了,但是有一个问题,Action众多,或者在Action中有多个对应一个或多个POJO的处理逻辑,那么这些xml文件就会随着Action文件和处理逻辑的增加而相应的增加,这显然不是个好的现象。 所以如果只是针对POJO来写相应的validate xml文件,无疑会好很多。 这就是Visitor校验器的功用了。


很多和我一样的初学者可能手边都有一般李刚写的 《Struts 2 权威指南》,里面正好讲了visitor校验器,但是我照着书上讲的步骤重复做了N次都没有正确,于是乎在网上搜索了相关的文章,最后终于发现书上没有讲完整 (P280-P281)

以下我来举个例子:

我建立了一个User的POJO,处理逻辑为UserAction, 测试页面为login.jsp


  1. <%@pagelanguage="java"pageEncoding="UTF-8"%>
  2. <%@taglibprefix="s"uri="/struts-tags"%>
  3. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"
  4. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <htmlxmlns="http://www.w3.org/1999/xhtml">
  6. <head>
  7. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
  8. <title>用户登录页面</title>
  9. <styletype="text/css">
  10. .errorMessage{
  11. font-weight:bold;
  12. color:red;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <s:formaction="pro_login.do">
  18. <s:textfieldname="user.username"label="用户名称"/>
  19. <s:passwordname="user.userpwd"label="登录密码"/>
  20. <s:submitvalue="登录"/>
  21. </s:form>
  22. </body>
  23. </html>

那么我的Visitor校验器为
UserAction-validation.xml


  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN""http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
  3. <validators>
  4. <fieldname="user">
  5. <field-validatortype="visitor">
  6. <paramname="context">userContext</param>
  7. <paramname="appendPrefix">true</param>
  8. <message></message>
  9. </field-validator>
  10. </field>
  11. </validators>

-------------------------------------------------------------------

(注:context参数可以随便设置,只要保持一致就可以了)

-------------------------------------------------------------------

User-userContext-validate.xml

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN"
  3. "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
  4. <validators>
  5. <fieldname="username">
  6. <field-validatortype="requiredstring">
  7. <message>请输入用户名称</message>
  8. </field-validator>
  9. </field>
  10. <fieldname="userpwd">
  11. <field-validatortype="requiredstring">
  12. <message>请输入登录密码</message>
  13. </field-validator>
  14. </field>
  15. </validators>

其中context参数将作为验证[img][/img]User类属性的文件名的一部分,如user属性返回一个User对象,那么用于验证User对象属性的文件名为User-abc-validation.xml。

这个文件要和User.class文件在同一个目录中。也就是要放到你的POJO文件相同的目录路径下,不然的话Visitor校验器就不会起作用。

分享到:
评论

相关推荐

    Visitor校验器 域对象级别上验证(完整示例源码)

    struts2中Visitor校验器以及域对象级别上验证和使用上下文优化的使用,我自己写的一个完整代码,详细的展示了如何使用Visitor校验器以及怎样在域对象上验证和注意事项,代码解压后可以直接部署到MyEclipse上运行,...

    深入浅出Struts2(附源码)

    9.2 Struts中的国际化支持 185 9.3 text标签 188 9.4 i18n标签 191 9.5 以手动方式选择一个资源包 193 9.6 小结 195 第10章 Model Driven和Preparable拦截器 196 10.1 把动作与模型隔离开 196 10.2 Model ...

    struts2.1.6 convertion,rest两插件的例子

    struts2.1.6 convertion插件(即注释方式配置)的helloworld 默认调用index()方法 文档说明用struts.xml中标签设置值,好象不用也行 rest插件例子 默认调用 create()方法 struts2.1.6 vistor校验例子 都是我测试例子,...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    9.2 Struts中的国际化支持 185 9.3 text标签 188 9.4 i18n标签 191 9.5 以手动方式选择一个资源包 193 9.6 小结 195 第10章 Model Driven和Preparable拦截器 196 10.1 把动作与模型隔离开 196 10.2 Model Driven...

    Visitor

    Visitor

    设计模式C++学习之访问者模式(Visitor)

    设计模式C++学习之访问者模式(Visitor)

    Visitor模式Visitor模式

    Visitor模式.docVisitor模式.doc

    Laravel开发-visitor

    Laravel开发-visitor 以数据库、页面点击量记录您的访问者,并为Laravel 5生成访问计数器

    试试visitor设计模式

    也许最开始出现这种模式,是因为另外的原因: 我有一堆数据放在一个库里头,不想让其它人拿着, 如果你要用数据干活,那你就把函数指针给我,我来替你使用这个数据。...然后人们就说,这是visitor模式。

    Visitor模式

    该PPT包含了Visitor里面所有的知识点和扩展,对于想要学习该模式的人来说是不二的选择,并且配上了源代,未经允许不可传至其他网站。

    Visitor TT1 BRK

    Visitor TT1 BRK

    visitor.js.zip

    visitor.js这个js文件能提供你关于你的网站的访客的详细信息(比如他在哪个城市,最后访问日期等等)。 该软件已改名为 session.js

    C++ Visitor模式

    23种设计模式之二十(行为模式)Visitor模式

    Laravel开发-visitor-log

    Laravel开发-visitor-log Laravel 4记录所有访客的包

    AXS Visitor Tracking System

    不错的统计+访客跟踪程序

    visitor pattern

    NULL 博文链接:https://zhang-yingjie-qq-com.iteye.com/blog/344236

    访问者模式VisitorPattern

    访问者模式(Java代码实现),博文附件

    设计模式系列之visitor

    博文链接:https://notguru.iteye.com/blog/78260

Global site tag (gtag.js) - Google Analytics