08 05Struts 2.x验证框架

1 验证框架基础使用

只要是MVC的框架,都会提供有验证框架,但是需要摆正一个明确的态度,任何一个框架的前端验证框架都不好用。

在之前的验证操作之中,都使用的是validate()方法进行的手工编写,但是这样的手工编写难度太高了,而且也太麻烦了,所以在开发之中可以利用验证框架来解决此类问题。

如果有验证框架了,那么就没有必要去覆写validate()方法了,但是验证框架依然基于validate()的操作形式使用。

1、首先需要有一个执行数据处理的Action——NewsAction;
2、为这个Action设置一个验证规则文件,名称是:NewsAction-validation.xml
(1)此文件要与NewsAction保存在同一个包中;

<?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">

3、定义NewsAction-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="news.nid">
		<field-validator type="required">
			<message>【验证框架】新闻编号不允许为空!</message>
		</field-validator>
	</field>
	<field name="news.ntitle">
		<field-validator type="requiredstring">
			<message>【验证框架】新闻标题不允许为空!</message>
		</field-validator>
	</field>
	<field name="news.ncontent">
		<field-validator type="requiredstring">
			<message>【验证框架】新闻内容不允许为空!</message>
		</field-validator>
	</field>
	<field name="news.npubdate">
		<field-validator type="date">
			<message>【验证框架】发布日期不允许为空!</message>
		</field-validator>
	</field>
</validators>

此时的代码几乎没有做任何的修改,而是直接使用了这样一个配置文件实现了数据的验证,并且横向替代了validate()方法,从代码的简洁度来讲,此类操作更加容易。

依然只能够很无奈的发现,此时的验证框架即使可以使用,也是在数据赋值成功之后。

2 验证加强

实际上在验证框架里面还可以做许多的事情,例如:验证数字的范围是否正确,长度是否合适,以及发布日期是否满足、正则操作是否可用等等。
范例:编写NewsAction-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="news.nid">
		<field-validator type="int">
			<param name="min">10</param>
			<param name="max">30</param>
			<message>【验证框架】id必须在 ${min} 和${max}之间</message>
		</field-validator>
	</field>
	<field name="news.ntitle">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<param name="minLength">4</param>
			<param name="maxLength">10</param>
			<message>【验证框架】新闻标题长度应为${minLength}-${maxLength}</message>
		</field-validator>
	</field>
	<field name="news.ncontent">
		<field-validator type="regex">
			<param name="expression"><![CDATA[\w+.\w+.\w+]]> </param>
			<message>【验证框架】新闻内容应为链接形式</message>
		</field-validator>
	</field>
	<field name="news.npubdate">
		<field-validator type="date">
			<message>【验证框架】发布日期不允许为空!</message>
		</field-validator>
	</field>
</validators>

即便现在可以进行验证了,那么问题依然存在,它只是横向替代validate()。但是如果数据类型输入有问题,那么依然会在后台出现错误,并且此时会显示的错误信息是:Invalid field value for field "news.nid".,这样的信息是可以修改的,只需要修改Messages.properties文件即可。
范例:修改Messages.properties文件,增加错误显示

invalid.fieldvalue.news.nid=输入错误,新闻编号必须输入数字!
invalid.fieldvalue.news.npubdate=输入错误,发布日期格式必须为(yyyy-MM-dd)

以上的信息实际上是数据类型转换的错误信息,这样的错误信息是在出错后自动使用的,也向fieldErrors中保存。

不管是验证方法还是验证框架,最为核心的概念:
(1)所有的错误信息都使用fieldErrors返回,使用addFieldError()添加错误;
(2)所有的验证框架都有一个最本质的问题——数据赋值之后执行。
正因为验证框架的执行顺序有问题,,所以在实际的开发之中,它只能作为二号验证器使用,或者不使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章