struts2提供了简单基本类型的自动转换,如
java
八种基本数据类型,以及
String
,
Date
等简单数据类型。
我们将上个例子修改一下:
index
.jsp中添加:
年龄:
<
input
type
=
"text"
name
=
"age"
/><
br
/>
生日:
<
input
type
=
"text"
name
=
"birthday"
/><
br
/>
result
.jsp中添加:
你的年龄:${requestScope.age}
<
br
/>
你的生日是:${requestScope.birthday}
UserAction中添加两个属性:
private int age
;
private Date birthday
;并添加
get/set
方法。运行后输入相应信息结果页面显示:
你的用户名:lisi
你的年龄:20
你的生日是:Sat Sep 08 00:00:00 CDT 1990
我们可以看到struts2已经将页面传过来的string类型经行了转换。
但是如果我们传入一个User类型的对象,struts2会不会帮我们转换的,肯定不会了,struts2怎么会知道User是个什么东西呢?当我们需要对复杂对象类型经行转换时就需要我们自己动手了。Struts2只会帮我做简单的事,复杂的事还是需要我们自己来做。
下面来看看一个复杂对象类型的转换该怎么做?(实例二)
index.jsp:
<
body
>
<
h2
>
请用逗号分隔用户名和年龄
</
h2
>
<
form
action
=
"userAction"
>
用户:
<
input
type
=
"text"
name
=
"user"
/>
<
input
type
=
"submit"
value
=
"提交
"
/>
</
form
>
</
body
>
result
.jsp:
<
body
>
<
s:property
value
=
"user"
/>
</
body
>
struts
.xml:
<
struts
>
<
package
name
=
"struts2_2"
extends
=
"struts-default"
>
<
action
name
=
"userAction"
class
=
"com.gufengxiachen.struts2_2.action.UserAction"
>
<
result
name
=
"success"
>
/result.jsp
</
result
>
</
action
>
</
package
>
</
struts
>
UserAction.java:
package com.gufengxiachen.struts2_2.action;
import com.gufengxiachen.struts2_2.model.User;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
return "success";
}
}
User.java:
package
com.gufengxiachen.struts2_2.model;
public
class
User {
private
String
username
;
private
int
age
;
public
String getUsername() {
return
username
;
}
public
void
setUsername(String username) {
this
.
username
= username;
}
public
int
getAge() {
return
age
;
}
public
void
setAge(
int
age) {
this
.
age
= age;
}
}
UserConversion.java(转换器类
):
package com.gufengxiachen.struts2_2.conversion;
import java.util.Map;
import java.util.StringTokenizer;
import com.gufengxiachen.struts2_2.model.User;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
public class UserConversion extends DefaultTypeConverter{
@Override
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
//从页面到后台转换
if(User.class==toType){
String[] str=(String[])value;
String firstValue=str[0];
StringTokenizer st=new StringTokenizer(firstValue,";");
String username=st.nextToken();
int age=Integer.parseInt(st.nextToken());
User user=new User();
user.setUsername(username);
user.setAge(age);
return user;
}else if(String.class==toType) //从后台向页面转换
{
User user=(User)value;
String username=user.getUsername();
int age=user.getAge();
String userInfo="你的用户名:
"+username+"
你的年龄:
"+age;
return userInfo;
}
return null;
}
}
UserAction-conversion.properties(配置转换器属性文件
):
user=com.gufengxiachen.struts2_2.conversion.UserConversion
web.xml和实例一样。
我们可以看到result.jsp
页面显示:
你的用户名:zhangsan你的年龄:15
这个很好理解,当struts2接受参数时发现Action中没有属性与之匹配,当它发现UserAction-conversion.perproties文件时,发现有个转换器,然后转向相应的转换器,转换后返回结果。
我们可以看到转换器实现了一个类:DefaultTypeConverter,并且重写了
c
onvertValue这个方法,这个方法就是执行转换的方法。在这个方法里,我们可以进行双向转换,即可以从页面传过来的String
转换为我们需要的对象,也可以经行反向转换,其实我们还可以继承
StrutsTypeConverter
类,这个类是
struts2
对类型转换的一个简单封装,它里面有两个方法一个是从
String
转换到对象,
convertFromString(Map<String,Object> context,String[],values,Class toClass),
另一个是从对象转换到
String
类型为:
converterToString
(
Map<String ,Object> context,Object o,
)
推荐继承StrutsTypeConverter
类,因为它方便,清晰。
下面来总结一下复杂类型转换:
对于自定义类型转换器来说需要提供三个信息:Action
的名字,
Action
中待转换的属性名以及该属性对应的类型转换器。其中
Action
的名字是通过属性文件
(
和
Action
同包
)
来获得的,
Action
中待转换的属性名是通过属性文件中的
key
值获得的,该属性对应的类型转换器是通过
key
值所对应的
value
值获得的。
可使用struts2
框架自带的类型转换器
StrutsTypeConverter
简化类型转换。
StrutsTypeConverter
继承于
DefaultTypeConverter
。提供两个抽象方法,分别为
convertFromString
和
converToString
,分别实现从页面向后台对象转换和从后台对象转换成字符串
还有个全局类型转换,就是不特定哪个Action
,对所有
Action
中相同的对象进行转换,和上面的类型转换唯一的区别就是转换的配置文件,文件名特定为:
xwork-conversion.perproties
。位置为
src
根目录下,内容为:待转换的类的全名(包括包名)
=
转换器的名字。
类型转换就介绍这么多,其实在实际应用中,用的不是特别多,想了解更多,可以参考struts2
的
API
文档。
分享到:
相关推荐
struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换
struts2学习笔记总结
struts2学习笔记,非本人所写,但有学习的价值,总结的很好,分享一个!
Struts2学习笔记,介绍了struts2的基础部分
这是学习struts2时记得重点笔记,包括了一些原理,ognl语句的编写,以及如何设置拦截器等等一些基本知识,起到复习和巩固的作用
struts2自学教程,讲解详细,通俗易懂! 欢迎下载!
struts2如何配置与自定义类型转换struts2如何配置与自定义类型转换
自己用struts2写的一个简单的局部数据类型转换实例,适合初学者
NULL 博文链接:https://hbiao68.iteye.com/blog/1452476
一个struts2的用户管理实例,涉及增删改查。 主要用到的技术: 1.struts2 2.国际化 3.类型转换 4.struts标签
毕生学习struts2的学习笔记,整理了好久,实打实的干货
struts2学习笔记,拦截器,action,所需jar包,从零开始
NULL 博文链接:https://zhaolianyang.iteye.com/blog/859890
struts2学习笔记,详细说明了struts2框架的执行流程,类型转换,输入校验和国际化等等
适合struts2入门使用,主要是struts拦截到的数据类型转换的问题
namespace :对应与项目名称后面的"/"(例如Struts2_0100_Introduction后面的"/") (http://localhost:8080/Struts2_0100_Introduction/) 四、 标签 是用来解决重名的问题,例如当系统的前台和后台都有一个action...
本人学习struts2的笔记,希望大家可以多多学习以后共同交流
传智播客struts2.1源代码_自定义类型转换器
Struts2框架
关于struts2的类型转换的处理方法。