`

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

阅读更多
这段时间重新开始拾起JAVA的学习,也是为了以后的工作打算,积累一些经验。



   记得开始的时候,学习Struts2中的输入校验,就对Vistor校验器情有独钟。首先,一般我们在提交表单的时候,对表单的各字段就要有校验的过程,实际部署过程中要分 客户端校验 和服务器端校验。 客户端校验使用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

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>用户登录页面</title>
		<style type="text/css">
.errorMessage {
	font-weight: bold;
	color: red;
}
</style>
	</head>
	<body>		
		<s:form action="pro_login.do">
			<s:textfield name="user.username" label="用户名称" />
			<s:password name="user.userpwd" label="登录密码" />
			<s:submit value="登 录" />
		</s:form>
	</body>
</html>

那么我的Visitor校验器为
UserAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
	<field name="user">
		<field-validator type="visitor">
			<param name="context">userContext</param>
			<param name="appendPrefix">true</param>
			<message></message>
		</field-validator>
	</field>
</validators>

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

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

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

User-userContext-validate.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
 "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
    <field name="username">
        <field-validator type="requiredstring">
            <message>请输入用户名称</message>
        </field-validator>
    </field>
    <field name="userpwd">
        <field-validator type="requiredstring">
        	<message>请输入登录密码</message>
        </field-validator>
    </field>
</validators>

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

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

     这个就是李刚老师没有写全的地方,附加个项目截图就更为清楚了。


这样的话,Visitor校验器就起作用了。
分享到:
评论
1 楼 rbw204 2011-10-07  
牛B

相关推荐

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

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

    struts2校验器类型详解

    在探讨Struts2校验器之前,我们首先需要了解这些校验器是如何被定义和集成到框架中的。如文中所述,Struts2的内建校验器主要位于`xwork-2.0.4.jar`压缩包中的`default.xml`文件里。这个文件定义了一系列常用的数据...

    Struts2学习文档

    以上内容详细介绍了Struts2框架的核心组成部分和技术细节,包括Action的实现方式、Result的配置方法、模型驱动的概念、异常处理机制、类型转换的实现、输入校验的流程、拦截器的设计与应用以及日志记录的配置。...

    Java实训教程 Java软件开发实战 Java开发框架介绍 struts2_7_数据验证 共56页.pptx

    除了基本的手动编程和框架内置验证外,Struts2还支持更高级的数据验证用法,如自定义校验器和visitor校验器的应用方法等。 1. **自定义校验器**: - 可以通过扩展Struts2提供的校验器类来自定义验证规则。 - 适用...

    struts2验证框架参数

    Struts2的核心特性之一就是其强大的验证机制,该机制允许开发者在请求到达控制器之前对用户输入进行检查,确保数据的完整性和正确性,从而避免潜在的运行时错误或安全漏洞。 ### Struts2验证框架的关键属性和语法 ...

    深入浅出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笔记

    Struts2中的错误处理机制主要通过`addFieldError`方法实现,该方法用于在表单验证失败时添加错误信息到用户界面。例如: ```java // 添加字段级别的错误信息 addFieldError("username", "用户名不能为空"); ``` 这...

    JavaEye论坛热点月报 总第8期

    - **关于Struts2中visitor校验器的解决方法**:针对Struts2框架的验证机制,特别是visitor校验器的使用方法和常见问题的解决方案。 3. **其他技术** - **g1安装Android软件详细攻略**:为Android开发者提供了...

    Struts2验证框架的配置及validation.xml常用的验证规则

    本文将详细介绍Struts2验证框架的配置方法以及validation.xml文件中常用的验证规则。 ### 验证框架的配置 在Struts2中,验证主要通过在Action类的关联配置文件validation.xml中定义规则来实现。该文件通常与Action...

    Visitor模式Visitor模式

    在这个例子中,我们可以看到,开发者使用 Visitor 模式来解决了增加新的虚函数的问题。这种方法可以使得开发者在不修改原有的类层次的情况下,能够对对象进行不同的处理。 Visitor 模式的优点是可以使得开发者在不...

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

    在`Demo18_Visitor`中,可能存在`ConcreteVisitorA`和`ConcreteVisitorB`这样的类,它们分别实现`Visitor`接口中的方法,执行不同的操作。 3. **元素接口(Element)**: 元素接口定义了一个接受访问者的接收方法...

    访问者模式VisitorPattern

    2. 定义元素接口或类,通常会有一个`accept(Visitor)`方法,接收访问者并调用相应的访问方法。 ```java public abstract class Element { public abstract void accept(Visitor visitor); } public class Employee...

    深入浅出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...

    C++ Visitor模式

    Visitor模式是设计模式中的一种行为模式,它在对象结构中引入了一个访问者角色,使得访问者能够对结构中的每个元素进行操作,而不改变元素本身的行为。这种模式允许我们在不修改已有类的情况下增加新的操作,遵循了...

    Laravel开发-visitor

    控制器方法可以接收请求并更新数据库中的访问记录。 3. **模型** (app/Models/): 创建一个 `Visitor` 模型,用于代表数据库中的访问记录。模型将与数据库表关联,提供插入、更新和查询数据的方法。表可能包含如 `...

    设计模式系列之visitor

    "设计模式系列之visitor"是一个关于软件设计模式的讨论,特别是关注于“访问者”(Visitor)模式。这个模式是GOF(Gamma, Helm, Johnson, Vlissides)在他们的经典著作《设计模式:可复用面向对象软件的基础》中提出...

    Visitor

    "Visitor" 在IT行业中可能指的是一个设计模式,即“访问者模式”。访问者模式是一种行为设计模式,它允许我们定义一种在多种不同对象结构中访问、改变或增加新行为的操作方式,而无需改变这些对象的结构。这个模式的...

Global site tag (gtag.js) - Google Analytics