输入校验是基于类型转换的,也就是说发生了类型转换才会有输入校验.而当类型转换后(无论成功或失败),输入校验都一定会执行..如果类型转换成功,则数据为用户输入的值,如果失败,int为被赋为0,String,Date等复合类型会被赋为null.然后就开始执行我们的输入校验了.struts2的输入校验大致可以分为3类,输入校验是有顺序的.
struts2的输入校验大致可以分为3类(按照他们被执行的顺序排列):
第一类-建立properties文件.
struts2的标签库里内置了输入校验的错误提示功能.当你的字段,如<s:textfield name="point"label="Point"></s:textfield>类型转换失败后,将相应的字段赋值为0或者null,且当返回当前页面时,会在point textfield上自动加上Invalid field value for field "point".里面的"point"是对应textfield里的name,其实它就是调用了addFieldError方法.
其实struts2已经内置了.不过显示信息太不友好了.建议要覆盖掉,而覆盖的方法就是建立properties文件.
这种方法用来检查当我们在textfield中填入了任何信息(纯空格也算)时,进行类型转换是否成功,如果失败的话就会addFieldError.当我们转换失败并返回当前页面时就能看到错误提示.但是如果我们什么都不填,int会被赋0,复合类型会被赋null,但不会addFieldError,这里我不太明白为什么会这样.希望有高手能告诉我一下噢.呵呵.
这种方法又分为全局和局部两种,全局是针对整个项目的.而局部是针对某个action的.如果建立了全局的.然后针对某个action建立一个局部的.在局部properties里的属性会覆盖全局的.而如果action里的某些属性没有在局部里被定义.则那些属性会调用全局的.
先说全局:
我们要在struts.xml中的<struts>标签中加入<constant name="struts.custom.i18n.resources" value="xxx"></constant> name中的值是固定的.而value可以随便改.如果value为"message",则我们要在src下建立message.properties文件.xwork.default.invalid.fieldvalue={0} error,{0} error代表当整个项目中某属性发生错误时,会在相应控件上addFieldError("属性名","属性名 error").有时候不是那么好用.
然后是局部:
局部的是针对某一个action的.在想覆盖内置输入校验,需要在对应action的目录下建立"action名.properties"文件,在该文件中加入“invalid.fieldvalue.属性名=对错误的描述”.
第二类-利用struts2的校验框架建立xml文件.
struts2提供了很强大的校验框架.而这种框架是针对某一个action的.我们要在对应的action目录下建立"action名-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="date">
<field-validator type="date" short-circuit="true">
<param name="max">2010-3-2</param>
<param name="min">1990-2-21</param>
<message>The date must between 2010-3-2 and 1990-2-21</message>
</field-validator>
<field-validator type="required">
<message>RegisterAction-validation:date can't be blank!</message>
</field-validator>
</field>
</validators>
前3行是固定的.validators标签也是固定的.只是validators里面又分为字段校验与非字段校验,他们其实只是处理方法不同.或者说是看问题的角度不同.其中字段校验比较容易简单实用,所以提倡大家都用字段校验的.
name代表你要校验的字段.
type代表用什么类型的校验器.
short-circuit代表短路的意思.就是说当前的field-validator如果不符合,也就是说message被addFieldError了.那么当前字段接下来的校验器都不会被执行.例如当我们输入了2012-2-21,这里的date校验器就会校验出.这个数据是不符合的.message被addFieldError了.那么下面的required校验器就不会被执行了.
至于到底有什么type的校验器.我们可以自己去xwork-core-2.1.6.jar~com.opensymphony.xwork2.validator.validators里的default.xml里查询.里面有校验器对应使用的类.
而对于param标签.对每个校验器有什么param可以在校验器里面的类里查.首先要checkout源代码下来(⊙o⊙)哦.
然后message就是说当不符合时被addFieldError的信息.
其实当我们在struts.xml里指定了action的name和calss.如<action name="register" class="com.test.action.RegisterAction" method="test">,struts2会在RegisterAction.java目录下自动寻找RegisterAction-register-validation.xml文件并进行校验.
第三类-action里的validate方法和validatexxx方法.
当我们在struts.xml中指定了action的method,如上面的.
校验首先会从validateTest开始.当执行完后再执行validate.
action大多都是继承ActionSupport,继承的validate是do nothing的.需要我们自己去实现.而类似validateTest这样的我们自己指定的校验和继承得来的validate是一样的(除了名字...)所以是执行了validateTest后执行validate.
ok...写完了.多少有些啰嗦.也不知道是不是真的正确哦.请大家指出!呵呵
最后总结下struts2输入校验的顺序:
全局和局部的properties->struts2的校验框架->validate方法.
properties觉得在输入校验中没多大用处.而如果我们的校验不需要太复杂的话,尽量使用框架.它功能也很强大了.当我们校验太复杂时,我们可以自己编写validate方法!!!
最近才学struts2.希望大家谅解我噢.
分享到:
相关推荐
### Struts2输入校验深度解析 #### 一、手动输入完成校验 在Struts2框架中,输入校验是确保数据完整性和安全性的重要环节。对于手动输入完成校验,Struts2提供了灵活的机制。 1. **普通处理方式**:在Action类中...
Struts 2 输入校验
本篇文章将深入探讨Struts2中的输入校验机制。 一、Struts2 输入校验概述 Struts2提供了多种进行输入校验的方式,包括Action级别校验、Validator框架校验、拦截器校验以及使用JSR303/JSR349 Bean Validation标准。...
本文将深入探讨Struts2中的输入校验机制,帮助开发者更好地理解和应用。 一、Struts2输入校验概述 在Struts2中,输入校验主要用于验证用户通过表单提交的数据,防止无效或恶意数据进入系统。Struts2提供了多种方式...
在Struts2中,输入校验是确保数据安全、准确和有效的重要环节。本篇文章将深入探讨Struts2的输入校验机制及其相关知识点。 **输入校验的重要性** 输入校验是Web应用开发中的关键步骤,它可以防止恶意用户提交无效或...
在Struts2中,输入校验是确保数据安全性和应用稳定性的重要环节。它帮助开发者防止非法或无效的数据进入系统,从而减少潜在的错误和安全漏洞。 **Struts2输入校验机制** 1. **内置验证框架**: Struts2提供了内置的...
要求使用Struts2的内建校验器校验“书名”、“作者”、“出版日期”、“价格”和“库存数量”字段;要求手动编写代码校验“书号”的有效性;要求手动编写代码校验“出版社”字段中是否包含了“出版社”三个字。
Struts2是一个流行的Java web开发框架,它提供了一套强大的输入校验机制,确保用户提交的数据符合业务逻辑的要求。在本文中,我们将深入探讨Struts2的输入校验功能,包括手动输入校验和基于验证框架的输入校验。 ##...
在Struts2中,输入校验是确保数据完整性和安全性的重要环节。输入校验可以防止恶意用户提交无效或有害的数据,并确保应用程序的稳定运行。以下是关于Struts2输入校验的详细知识: 1. **客户端校验**: 客户端校验...
struts2的输入校验有两种方式: 一.重写validate()方式 二.采用配置文件的方式 先我们就以一个简单的登录的例子来讲解这个吧. 重点讲解下,第二个采用配置文件的方式: 1.添加一个xml的校验文件,保存在...
Struts2作为一款流行的Java Web框架,其在处理用户输入数据和实现多语言支持方面具有强大的功能。在“Struts2数据校验与国际化”这一主题中,我们将深入探讨Struts2如何通过不同的验证机制确保数据的有效性,以及...
在Struts2中,校验器(Validator)是处理用户输入验证的核心组件,确保提交到服务器的数据符合预设的业务规则。这篇博客文章可能是关于如何使用Struts2的内置校验机制以及自定义校验规则的探讨。 Struts2的校验框架...
在Struts2框架中,输入校验是一个关键环节,它确保了用户提交的数据符合应用的要求,从而避免了无效数据导致的错误或安全问题。本讲将深入探讨Struts2的输入校验机制。 1. **Struts2输入校验概述** - 输入校验是...
在Struts2中,输入校验是一个至关重要的部分,它确保了用户从客户端提交的数据符合预设的业务规则,从而避免了无效或不合法数据进入系统。本篇文章将详细介绍如何在Struts2中进行输入校验,包括两种主要实现方式:...