`

温故Struts2知识:

阅读更多
一、类型转换,由String类型转化为对象类型,两种方式:
1.全局转化(支配项目中所有String与制定对象的转化)-----实现方式:一个全局属性文件,名字固定:
xwork-conversion.properties
配置文件中是正对类对象配置转化该对象的converter;
例如:com.test.bean.Point=com.test.converter.PointConverter
2.局部转化(针对一个aciton控制String转化为对象)-------实现方式:根据不同aciton取名,一个Action一个属性
文件:action名+'-conversion.propertise'
而且配置文件中是针对属性配置转化该属性的converter;例如:point=com.test.converter.PointConverter
类型转化需要程序员提供一个converter类,当然该类继承DefaultTypeConverter或者StrutsTypeConverter

二、类型转化失败提示信息,为实现前台页面用户提交错误信息后系统做出的信息提示:(注意是类型转化失败后提示
信息,而不是信息校验失败)也有两种方式:
1.
全局类型转化失败提示信息(针对项目中所有的action,当前台提交信息错误了,统统以同一种风格显示信息错误)
-----实现方式:一个全局资源(属
性)文件,名字根据struts.xml配置文件中<constant name="struts.custom.i18n.resources"
 value="message"></constant>确定,对应这个我们必须取名:message.properties
描
写配置文件例如:xwork.default.invalid.fieldvalue={0} 
error,表示当页面信息输入的age对应了abc,类型转化失败后,就会提示"age 
errror"而如果日期date输入abc,类型转换失败后,就会提示"date error"。这样显然是不人性化的。
2.局部类型转化失败提示信息(针对指定action相应作出信息响应)-----实现方式:根据不同action取名,一个
action一个属性文件:action名+'.properties'
描写配置文件例如:
invalid.fieldvalue.age=/u5e74/u9f84/u8f93/u5165/u4fe1/u606f/u4e0d/u6b63/u786e,它是针对action
中个属性来确定错误后显示的信息的,非常不错

三、struts2自动类型转化与自动校验:
struts2内置的自动类型转化仅能实现简单类型和string类型间的转化、String与对象间的转化则需要程序员通过“类
型转换”方式了。
struts2做的自动校验实际上只是对类型校验,即当struts2自动类型转化失败时,它便会给出校验失败信息。但校验
信息并不可观。
而
一旦在jsp页面中引用了struts2的标签<%@ taglib prefix="s" uri="/struts-tags" 
%>,并使用其中的标签<s:textfield name="username" 
label="username">这些,struts2都会自动在类型转化失败后给出校验失败信息。
而这种信息并不友好,所以我们为了更人性化有两种选择:
1.不使用struts2标签,引用html自带的form标签(显然这是最糟糕的选择,因为struts2标签拥有很多优势)。
2.使用struts2标签,将它的自动校验信息根据我们的要求来显示,即改变struts2的默认提示。显然这是很棒的。

四、struts2人为校验,有两种校验方案
1.重写validate()方法,在方法体内做逻辑判断和增加错误提示信息。该方法会对所在
action中的所有execute()逻辑方法做校验,例如我们有input()方法、有update()方法,都会被它校验,也就是说,
对于
action而言,validate方法是它的全局校验方法。针对这种不方便,struts2提供了局部校验方法:
2.validate+方法名
()方法,例如方法input()的校验方法就为:validateInput(),而update()的校验方法也自然就
是:validateUpdate(),甚至是execute()方法也可以有自己的校验方法:validateExecute()。

五、类型转化失败提示信息与校验失败提示信息:
由于action对前台的信息处理是:首先对其做类型转换,失败了将类型转换失败提示信息放
入fielderror中;然后类型转换失败后的信息依然会接受validate()方法对其做校验信息,如果校验失败了,方法又将
校验失败信息放入
fieldderror中后。则前台将看到两条信息错误提示信息。
例如:前台age属性用户给出了“abc”值,则系统会提示“年龄类型不正确”还会提示“年龄必须在1-150之间”。这种
两种提示显然是不友好的。我们肯定更希望得到在类型不真确的情况下首先提示类型不正确,而在类型真确的前提下
再提示校验不通过的信息。
针
对这种问题,struts2的标签显然带来了不方便,因为它不可避免的对类型进行着自动转换操作,如何让它不执行?
给struts2标签中增加一个属
性:theme。中文意思是风格、主题。我们只需设置theme="simple"。则struts2标签功能就几乎类似于html中
对应标签了。(但是
记住,即使如此,struts2标签还是有优势的:比如它依然能实现回写功能)

六、校验框架
校验框架是通过xml实现,程序员只需要编写一个xml文件,按照一个校验DTD方式编写。
当然校验框架的策略是针对每一个action的,也就是说,对应一个action,你要对它做校验就必须为它配置一个xml,
配置的这个xml是不可能为其他aciton做校验的。
在校验的xml文件取名上也是有规定的:action对应的名字+'-validation.xml'。例如RegisterAction对应的校验配
置文件名只能是:RegisterAction-validation.xml

值得注意的一点:struts2提供了硬编码校验和xml文件校验两种校验方式,如果程序员对一个Action同时用了这两种
校验方式,则
struts2会都进行校验,其校验的方式是先xml文件校验然后执行方法validate校验。所以使用的时候应该确定一种方
式进行校验。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics