struts2讲义王昭珽0621Word下载.docx
- 文档编号:21366989
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:55
- 大小:106.33KB
struts2讲义王昭珽0621Word下载.docx
《struts2讲义王昭珽0621Word下载.docx》由会员分享,可在线阅读,更多相关《struts2讲义王昭珽0621Word下载.docx(55页珍藏版)》请在冰豆网上搜索。
示例
自定义类型转换器
TypeConverter接口
struts2内建的类型转换器并不能解决所有的问题,那就需要自己创建类型转换器。
自定义的类型转换器必须实现ognl.TypeConverter接口或对这个接口的某种具体实现做进一步扩展。
TypeConverter接口只有一个名为convertValue的方法,它的方法签名如下:
publicObjectconvertValue(Map<
String,Object>
context,Objecttarget,Membermember,StringpropertyName,Objectvalue,ClasstoType);
参数:
context:
将在其中进行类型转换的OGNL上下文环境。
target:
将在其中对有关属性进行设置的目标对象。
member:
将被设置的类成员的名字。
propertyName:
将被设置的属性的名字。
value:
将被转换的值。
toType:
转换结果的类型。
DefaultTypeConverter
与自行实现TypeConverter接口相比,对该类扩展更容易一些,他是对TypeConverter金额接口的一种默认实现类,且他有简单的方法签名。
context,Objectvalue,ClasstoType){
returnconvertValue(value,toType);
}
publicObjectconvertValue(Map<
context,Objecttarget,Membermember,
StringpropertyName,Objectvalue,ClasstoType){
returnconvertValue(context,value,toType);
}
自定义类型转换器的配置
在使用一个自定义的类型转换器之前,必须先对它进行配置。
这种配置可以基于字段,也可以基于类。
基于字段:
在动作类所在的包中创建ActionClass-conversion.properties的文件,其中的内容可能为下所示:
fieldname=customConverter1
基于类:
在WEB-INF/classes子目录下创建一个conversion.properties文件,其中的内容可能为下所示:
fullQualifieldClassName=customerConverter1
与复杂对象的配合使用
与Collection配合使用
与Map配合使用
验证
Strut2验证可以通过一个XML配置文件和注解的方式来实现,当然手工验证(编码验证)也是支持的。
同时也可以通过XML和注解共同使用的方式实现联合验证。
Struts2的验证是通过validation和workflow拦截器实现的,它们都属于defaultinterceptorstack。
validation拦截器用于验证并组织错误消息。
workflow拦截器用于检测是否包含错误消息,假如有,它将返回结果为input所指向的页面,并将错误消息和原先输入的数据一同呈现给客户。
如果您的程序中使用了默认的验证(或者转换器)而没有提供为input的结果,则将出现错误。
注解验证
注解验证从struts2.1版本开始就不建议使用了。
基础验证BasicValidation
让我们一步一步做一个基础验证的示例
1.步骤一:
创建输入表单
create.jsp
<
body>
<
s:
formaction="
helloValidation"
>
<
textfieldname="
name"
label="
姓名"
/s:
textfield>
age"
年龄"
address"
籍贯"
submitvalue="
提交"
submit>
form>
/body>
2.步骤二:
创建动作类
HelloAction.java
packagecn.wzhting;
importcom.opensymphony.xwork2.ActionSupport;
publicclassHelloActionextendsActionSupport{
privatestaticfinallongserialVersionUID=117358005790515177L;
privateStringname;
privateIntegerage;
privateStringaddress;
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
this.name=name;
publicIntegergetAge(){
returnage;
publicvoidsetAge(Integerage){
this.age=age;
publicStringgetAddress(){
returnaddress;
publicvoidsetAddress(Stringaddress){
this.address=address;
3.步骤三:
创建验证器。
验证配置文件必须是以下两种形式之一
●<
ActionClassName>
-validation.xml
-<
ActionAliasName>
HelloAction-validation.xml
?
xmlversion="
1.0"
encoding="
UTF-8"
!
DOCTYPEvalidatorsPUBLIC
"
-//OpenSymphonyGroup//XWorkValidator1.0.2//EN"
validators>
fieldname="
field-validatortype="
requiredstring"
<
message>
请输入姓名<
/message>
/field-validator>
/field>
int"
paramname="
min"
13<
/param>
max"
19<
年龄为13~19周岁的才允许填写<
/validators>
4.步骤四:
请确认你的struts.xml文件中该动作有input的结果。
struts.xml
…
actionname="
class="
cn.wzhting.HelloAction"
resultname="
success"
/createConfirm.jsp<
/result>
error"
/error.jsp<
input"
/create.jsp<
/action>
假如你没有这样设置,你将会得到“Noresultdefinedforaction***andresultinput”的错误提示。
客户端验证Client-sideValidation
让我们一步一步做一个客户端验证的示例
标签的validate设置为true;
●某些主题(themes)不支持客户端验证;
步骤一:
head>
metahttp-equiv="
Content-Type"
content="
text/html;
charset=UTF-8"
/>
title>
Validation-Basic<
/title>
head/>
/head>
helloValidation.action"
validate="
true"
注意:
●虽然使用了<
标签,此处我们只是利用其默认样式。
●虽然struts2中的动作带不带action后缀效果一样,但是在此处最好加上action后缀,不然会报错。
步骤二、三、四通《基础验证BasicValidation》一节,此处省略。
动作和命名空间(Actionandnamespace)
如果表单提交到的动作不在默认命名空间里,在使用<
时必须指定其namespace属性。
例如,helloValidation在命名空间/ns内,可能的struts.xml如下:
packagename="
p1"
extends="
struts-default"
namespace="
/ns"
/package>
输入表单如下:
看上去应该能正常运行,客户端验证将不能。
struts必须准确的知道动作所在的命名空间(不是通过URL),因此正确的写法如下:
/ns/helloValidation.action"
内建验证器
struts2为我们共内置了16个验证器,且全部是基于字段的验证器。
requiredvalidator
功能
用来验证某个给定的字段的值不是null。
注意,空字符串不是null。
参数
参数名
类型
默认值
必须的
描述
fieldName
String
no
要验证的字段名
(用法见后面的说明)
页面:
fielderror/>
validate"
userName"
用户名"
登录"
动作类:
publicclassValidationActionextendsActionSupport{
privatestaticfinallongserialVersionUID=6877330242746547448L;
privateStringuserName;
privateStringpassword;
publicStringgetUserName(){
returnuserName;
publicvoidsetUserName(StringuserName){
this.userName=userName;
publicStringgetPassword(){
returnpassword;
publicvoidsetPassword(Stringpassword){
this.password=password;
验证配置文件:
password"
required"
Thepasswordfieldisrequired!
运行结果:
说明
验证配置文件的另外一种写法:
validatortype="
password<
/validator>
requiredstringvalidator
验证给定的字段的值既不是null、也不是空白。
trim
Boolean
true
验证前是否要去掉前导和尾缀的空白字符
required="
requiredposition="
left"
passwordname="
密码"
password>
PleaseinputtheuserName!
trim"
false<
Pleaseinputthepassword!
userName<
intvalidator
用来验证某个字段的值是否可以被转换为一个整数。
若指定参数,还验证是否在允许的范围内。
min
Integer
允许的最小值。
若没有给出该参数则无限制
max
允许的最大值。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- struts2 讲义 王昭珽 0621