快捷搜索:

关于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

login.jsp

1 @ page language="java" pageEncoding="UTF-8"%>

2 @ taglib prefix="s" uri="/struts-tags"%>

3 DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

4 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

5 html xmlns="http://www.w3.org/1999/xhtml">

6head>

7meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

8title>用户登录页面title>

9link href="utils/css/public.css" type="text/css" rel="stylesheet" />

10head>

11body>

12div id="all">

13div id="header">headerdiv>

14div id="content">

15s:form action="pro_login.do">

16s:textfield name="user.username" label="用户名称" />

17s:password name="user.userpwd" label="登录密码" />

18s:submit value="登 录" />

19s:form>

20div>

21div id="footer">footerdiv>

22div>

23body>

24 html>

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

1 xml version="1.0" encoding="UTF-8"?>

2 DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

3 validators>

4field name="user">

5field-validator type="visitor">

6param name="context">userContextparam>

7param name="appendPrefix">trueparam>

8message>message>

9field-validator>

10field>

11 validators>

(注:context参数可以随便设置,只要维持同等就可以了)

User-userContext-validation.xml

1 xml version="1.0" encoding="UTF-8"?>

2 DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"

3"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

4 validators>

5field name="username">

6field-validator type="requiredstring">

7message>请输入用户名称message>

8field-validator>

9field>

10field name="userpwd">

11field-validator type="requiredstring">

12message>请输入密码message>

13field-validator>

14field>

15 validators>

16

此中context参数将作为验证User类属性的文件名的一部分,如user属性返回一个User工具,那么用于验证User工具属性的文件名为User-abc-validation.xml.

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

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

这样的话,Visitor校验器就起感化了。

您可能还会对下面的文章感兴趣: