Struts2 Chater 4&5 Struts2中的验证输入和数据类型的转换

来源:互联网 发布:元朝历史书籍 知乎 编辑:程序博客网 时间:2024/05/17 22:21
<!--Struts2 Chater 4&5 Struts2中的验证输入和数据类型的转换Goal:其中struts2中的服务器中的验证这个比较重要!数据类型转换在要用到的时候也比较重要!-->一,Struts2中的验证输入,配置struts2中的验证框架!细分下来一共只需要三个步骤!a)在需要进行验证的action的类,必须要继承自ActionSupport,这个问题也是比较容易被忽略的,比如说我花了15分钟才发现了这个问题!eg:class UserAction extends ActionSupport{}b)创建进行验证的配置文件!创建规则:1)配置文件必须和action类位于同一目录! eg:com.shu.action2)命名一定要规范,其文件名格式必须是:验证所有方法的:action的名称-validation.xml验证指定方法的:action的名称-被访问的action的名字-validation.xmleg:在com.shu.action下有个UserAction文件,并且有个UserAction类,该类下面有一个add()方法(调用它需要这样写:addAct.action)!然后在action中:<action name="*Act" class="com.shu.action.UserAction" method="{1}"><re....></result></action>这样下来,我们的xml配置文件命名就需要这样写:验证所有方法的:UserAction-validation.xml验证指定方法的:UserAction-addAct-validation.xmlc)查看内置验证器配置文件,进行验证配置!内置验证器的配置文件位于:Struts2 core librairies/xwork-core/com.opensymphony.xwork2.validator.validators下的default.xml文件在xml文件中不要忘了写入这句话(位于xwork-core/xwork-validate.dtd,需要加提示就和前面导入xmlcatelog一样的方法!):<!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="userInfo.userName"><field-validator type="注释1"><message>当不满足验证时需要返回的文字信息</message></field-validator></field></validators>注释1:关于type=""required->nullrequiredstring->""&null然后,当type等于有些类型(可以在default.xml中查看,导入源码可以查看源码)时,需要在<field-validator>标签之间配置其余的标签!eg:字符串的长度验证:<field-validator type="stringlength">//如果需要取消去掉左右空格(注意源码中是写的doTrim,但是这里要写trim,同样适用于requiredstring等其余支持该属性的方法)<param name="trim">false</param><param name="min">6</param><param name="max">20</param><message>该元素的长度只能在6-20位之间!</message></field-validator>//两次密码要相同的验证<field-validator type="fieldexpression">//表达式<param name="expression">userInfo.pwd1==userInfo.pwd2</param><message>两次的密码必需要一直!</message></field-validator>//正则表达式的匹配<field-validator type="regex">//表达式<param name="expression">写入正则表达式</param><message>该元素必须要满足XXX</message></field-validator>太多了~其余的可以参照default.xml(Struts2 core librairies/xwork-core/com.opensymphony.xwork2.validator.validators下的default.xml文件)对了~这还有一个老师给我们讲的一个技巧性的东西!我们都知道,在数字进行验证时,如果用户没有输入就会报出系统异常,为了避免这样的错误,我们可以在model中的get,和set方法中做一下手脚,并且把类型换为包装类!eg:Integer age;getAge(){if(this.age==null){this.age=0;}return this.age;}setAge(Ingeger age){if(age==null){age=0;}this.age=age;}这里就是利用了包装类可以让数字类型的数据为null的特点!二,Struts2中的数据类型的转换(这个~那天有点走神~忙于做作业去了~所以就把向sir的直接拿过来了)!1.Struts2中类型转换分为两种:a)手动(自定义)转换器b)自动转换器2.手动(自定义)转换器(针对特殊属性)a)在action的类中,必须继承ActionSupport类。b)定义转换器的类,继承DefaultTypeConvert,重写convertValue()方法。该方法示例:public class DateConvert extends DefaultTypeConverter {/** *  * value:表示表单提交的数据 *  * toType:表示目标类型 *  * [Ljava.lang.String : 表示一个String的数组 *  */public Object convertValue(Map<String, Object> context, Object value,Class toType) {String[] data = (String[])value;SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日");try {return fmt.parse(data[0]);} catch (Exception e) {e.printStackTrace();}return null;}}c)创建配置文件(注意:1.文件名必须是:Action的类名-conversion.properties ; 2. 必须将配置文件存放在Action所在的包中。)文件的配置方式:#局部:要求使用属性名;全局要求写类名#date=com.zuxia.convert.DateConvert#number=com.zuxia.convert.NumberConvert#注意:全局配置,需要写类的信息,而不是属性名com.zuxia.model.Number=com.zuxia.convert.NumberConvert3.自动转换器(常用的方式)基本数据类型+String类型都是可以自动转换。对象类型自动转换:在input中使用:对象名.属性名<!--Author:Lovingshu's ForeverDate:2011-10-28 23:08Remark:EA always like to kidding us!the BF3 is not so good as I thought,just like medal of honour:2010!the behaver always can't  catch what EA says!-->
原创粉丝点击