5.26日音讯,Struts2必须掌握的知识
日期:2013-05-26发布:首创网络浏览:785次
5.26日音讯,Struts2必须掌握的知识。Struts2是在WebWork2基础发展而来的。和struts1一样,Struts2也属于MVC框架。一、Struts2类型转换介绍 类型转换:解析HTTP请求参数,将Http请求参数赋值给Acti···
本文关键字:5.26日,音讯,Struts2,必须,掌握,的,知识,5.26日,
5.26日音讯,Struts2必须掌握的知识。Struts2是在WebWork2基础发展而来的。和struts1一样,Struts2也属于MVC框架。一、Struts2类型转换介绍
类型转换:解析HTTP请求参数,将Http请求参数赋值给Action的属性;比如:
此处将名为name、password、age的值赋值给Action的属性,类型转换是指这个赋值过程中可能出现的类型不一致问题而做出的转换,因为HTTP参数都是字符串类型的;因此从String类型的age参数传给int类型的age属性时,就需要类型转换,当然这些struts2框架已经做完了,开发人员不需要自行处理;
Struts2已经内建了对于String和基本类型的类型转换,比如String<-->int、String<-->boolean等;
Action属性一定要有getter和setter方法!
Struts2提供了强大的类型转换支持,不仅提供了内置的类型转换器,还可以自定义类型转换器,以满足自定义需求;
Struts2类型转换是通过params拦截器进行转换;如果转换失败,则conversionError拦截器拦截该异常,并封装到fieldError中,放入ActionContext中;
Struts2类型转换还支持OGNL表达式,只需要在表单控件的name属性使用ognl表达式即可,比如表单控件的name属性为user.name,则此控件的数据将进入赋值给Action的user属性中的name属性;
二、通过一个例子初步了解Struts2类型转换
此处的类型转换因为是内建的,因此代码上和原来的struts2应用没有不同,struts2框架内部完成了所有了类型转换,以下程序是将name、age赋值给Action类的name、age属性,gender、salary赋值给p.gender、p.salary属性;struts.xml的配置和原来一样,所以就不给出了;
Conversion01Action.java
packageorg.conversion.action;
importorg.person.Person;
importcom.opensymphony.xwork2.ActionSupport;
publicclassConversion01ActionextendsActionSupport{
privateStringname;
privateintage;
privatePersonp;
publicStringexecute()throwsException{
System.out.println(name);
System.out.println(age);
System.out.println(p.getGender());
System.out.println(p.getSalary());
returnSUCCESS;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicPersongetP(){
returnp;
}
publicvoidsetP(Personp){
this.p=p;
}
}
1.jsp
此处需要注意的是性别、薪水的表单控件的name属性是OGNL表达式;
补充:List和Map的Action属性的类型转换问题
前面我们将的都是基本类型和自定义类型,因此这里我们将讲述集合类型的类型转换问题;
如果Action的属性为List类型,List
如果Action的属性为Map类型,Map
以上的list和map类型属性都通过泛型的方式说明集合元素的类型,如果在JDK1.5之前,泛型没有出现,则需要通过局部类型转换文件进行表示;
局部类型转换文件:对于特定Action的特定属性有效,位于特定Action同一目录下,命名规则:ActionName-conversion.properties;
对于List元素来说,内容如:Element_attributeName=typeName;
对于Map元素来说,
(1)如果表示key的类型,则:Key_attributeName=typeName;
(2)如果表示value的类型,则为:Element_attributeName=typeName;
比如,此处没有使用泛型,而是使用了局部类型转换文件:
Conversion02Action.java
packageorg.conversion.action;
importjava.util.List;
importjava.util.Map;
importorg.person.Person;
importcom.opensymphony.xwork2.ActionSupport;
publicclassConversion02ActionextendsActionSupport{
privateListlists;
privateMapmaps;
publicStringexecute()throwsException{
System.out.println(((Person)lists.get(0)).getGender());
System.out.println(((Person)lists.get(0)).getSalary());
System.out.println(((Person)maps.get("one")).getGender());
System.out.println(((Person)maps.get("one")).getSalary());
returnSUCCESS;
}
publicListgetLists(){
returnlists;
}
publicvoidsetLists(Listlists){
this.lists=lists;
}
publicMapgetMaps(){
returnmaps;
}
publicvoidsetMaps(Mapmaps){
this.maps=maps;
}
}
Conversion02Action-conversion.properties
Element_lists=org.person.Person
Key_maps=java.lang.String
Element_maps=org.person.Person
2.jsp
Conversion02Action-conversion.properties
Element_lists=org.person.Person
Key_maps=java.lang.String
Element_maps=org.person.Person
三、自定义类型转换器
1.继承DefaultTypeConverter
如果我们自定义一个类型转换器,第一种方法是继承DefaultTypeConverter,并重写publicObjectconvertValue(ActionContextcontext,Objectvalue,ClasstoType);
这个函数的功能是完成双向转换,即从String数组转到Action属性及Action属性转到String;需要注意的是从String数组转到Action属性,而不是String转到Action属性;如果只有一个字符串,则取params[0]即可;
因此一般此函数的模板代码如下:
publicObjectconvertValue(Map
ClasstoType){
if(toType==String.class){
......
returnString;
}
elseif(toType==Action属性.class){
Stringparams[]=(String[])value;//必须是字符串数组
.......
returnAction属性;
}
returnnull;
}
完成自定义类型转换器编写后,如果需要使用此转换器,就需要配置,通常有两种配置方法:
1.局部类型转换文件中配置,仅对特定的Action的特定属性有效,比如在Action1中有aa属性,则仅对Action1的aa属性有效;
2.全局类型转换文件中配置,对某个类型都有效;比如对Person注册了类型转换器,则对任何Person和String的转换都有效;
全局类型转换文件命名为:xwork-conversion.properties,通常放在WEB-INFclasses下;
文件内容如:attributeName=ConvertClass,比如aa=org.convert.Converter1
attributeName表示属性名称,convertClass表示转换器的实现类;
局部类型转换文件命名为:ActionName-conversion.properties,放在特定Action的目录下;
文件内容如:typeName=ConvertClass,比如org.person.Person=org.convert.Converter2
注意:typeName表示转换类型,convertClass表示转换器的实现类;
代码示例:
Conversion03Action.java
packageorg.conversion.action;
importorg.person.Person;
importcom.opensymphony.xwork2.ActionSupport;
publicclassConversion03ActionextendsActionSupport{
privatePersonp;
publicStringexecute()throwsException{
System.out.println(p.getGender());
System.out.println(p.getSalary());
returnSUCCESS;
}
publicPersongetP(){
returnp;
}
publicvoidsetP(Personp){
this.p=p;
}
}
Converter01.java
packageorg.converter;
importjava.util.Map;
importorg.person.Person;
importcom.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
publicclassConverter01extendsDefaultTypeConverter{
@Override
publicObjectconvertValue(Map
ClasstoType){
if(toType==String.class){
Personp=(Person)value;
returnp.getSalary()+","+p.getGender();
}
elseif(toType==Person.class){
Stringparams[]=(String[])value;
String[]values=params[0].split(",");
Personp=newPerson();
p.setGender(values[1]);
p.setSalary(Double.parseDouble(values[0]));
returnp;
}
returnnull;
}
}
3.jsp
pageEncoding="utf-8"%>
Conversion03Action-conversion.properties
p=org.convert.Converter01
2.继承StrutsTypeConverter
StrutsTypeConverter是DefaultTypeConverter的子类,DefaultTypeConverter的类型转换器是在一个函数中进行双向转换,而继承StrutsTypeConverter的类型转换器则是将两个方向分别用两个函数实现:
@Override
publicObjectconvertFromString(Mapcontext,String[]values,ClasstoClass){
}
@Override
publicStringconvertToString(Mapcontext,Objecto){
}
- 欢迎大家阅读浏览,部分内容来源于网络,如有侵权,请联系我们删除!
服务项目
热门信息
- 邯郸网络公司:模板建站的好处有哪些?
- 3642024-04-25
- 4.20日音讯,邯郸网络公司:企业官网有必要做吗?
- 2132024-04-20
- 4.20日音讯,邯郸网络公司:为什么模板建站如此便宜?
- 2872024-04-20
- 4.9日讯,企业网站建设如何发挥网络营销功能?
- 4092024-04-09
- 4.9日音讯,企业网站维护的日常工作
- 2912024-04-09
- 4.5日讯,建设一个外贸网站多少钱?
- 4862024-04-05
- 邯郸网络公司:网站建设开发有哪些细节需要注意?
- 5402024-03-07
- 邯郸网络公司:外贸网站制作的8个步骤
- 3772024-03-05
- 企业网站如何制作才能取得更好的效果
- 5662024-02-29
- 简单3步,轻松做企业官网
- 6822024-02-18