structs2 DefaultTypeConverter类型转换说明

1.  创建含有需要类型转化对象的JSP页面(input.jsp,里面表单里含有自定义类)

<body>

<h3><font color="red">使用逗号将点的两个坐标分隔开</font></h3>

<s:form action="Register">

<s:textfield name="point" label="point"/>

<s:textfield name="age" label="age"/>

<s:textfield name="username" label="username"/>

<s:textfield name="date" label="birthday"/>

<s:submit label="submit"></s:submit>

</s:form>

</body>

2.  创建信息输出JSP页面(out.jsp)

<html>

<head>

<title>My JSP ‘output.jsp‘ starting page</title>

</head>

<body>

point:<s:property value="point"/><br>

age:<s:property value="age"/><br>

username:<s:property value="username"/><br>

date:<s:property value="date"/><br>

</body>

</html>

3.       创建上面JSP页面中需要类型转换的对象所对应的类(Point.java)

public class Point

{

private int x;

private int y;

//getter、setter方法

}

4.  创建form提交接受的Action(RegisterAction.java)

public class RegisterAction extends ActionSupport

{

private Point point;

private int age;

private String username;

private Date data;

//getter、setter方法

@Override

public String execute() throws Exception

{

return SUCCESS;

}

}

5.  Struts.xml中配置RegisterAction

<action name="Register" class="com.test.action.RegisterAction">

<result name="success">/output.jsp</result>

</action>

6.  创建能转换Point的类(PointConvert.java)

注意:与StrutsTypeConverter方式的转换不同之处!

public class PointConverter extends DefaultTypeConverter

{

public Object convertValue(Map context, Object value, Class toType)

{

if(Point.class==toType)

{

Point point=new Point();

String[] str=(String[])value;

String[] paramValues=str[0].split(",");

int x=Integer.parseInt(paramValues[0]);

int y=Integer.parseInt(paramValues[1]);

point.setX(x);

point.setY(y);

return point;

}

if(String.class==toType)

{

Point point=(Point)value;

int x=point.getX();

int y=point.getY();

String result="[x="+x+", y="+y+"]";

return result;

}

return null;

}

}

引入参数中的toType表示的是目标类型(是字符串类型还是Point类型),

当客户端string提交到pointConvert这个action时候(即:toType==Point.class),value指的是textfield中填写的字符串。

对if(Point.class==toType)过程解释:

(1) String[] str=(String[])value;-----------------将value显示转化为字符数组后赋值为数组str[];

(2)String[] paramValues=str[0].split(",");-------取出str[]的第一个元素,即:str[0],当textfield里填写的是“20,40”,str[0]里的内容也就是一个字符串“20,30”,然后通过str[0].split(“,”)将字符串“20,30”以逗号为界限拆分成一个数组并赋值给paramValues[],这时paramValues[]里内容是{“20”,”30”};

(3) int x=Integer.parseInt (paramValues [0]);-----将字符串类型的“20”转换为integer型赋值给x;

7.       配置属性文件使得让Point属性由PointConvert处理:

⑴  在和要被convert的类的同目录下新建一个文件:

RegisterAction -conversion.properites。

RegisterAction --------要转换的属性所在的类的类名

-conversion.properies-----固定格式

⑵填写属性文件内容:

point=com.test.converter.PointConvert

point--------具体要转换哪一个属性

com.test.converter.PointConverter-----具体用那个convert类来转换point

注意:如果对多个属性进行转换可以添加多个如point=com.test.converter.PointConvert

形式的内容。

8. 程序运行流程

运行流程分两步:一、字符串字段被转化为对应数据类型字段上传到action中;二、对应字段被转化为字符串类型字段显示在输出页面;

第一步:input.jsp提交表单---->进入表单提交的action(Register.action),在此action里接受表单穿过来的各个字段,是基本数据类型字段struts2会自动进行对其转换,如果遇到对象类型字段则进入此action所在的目录查找转换配置文件(RegisterAction-convertion.properties),在转换配置文件中查找处理此对象数据类型的类(PointConverter.java)---->对象类型转化类将form提交过来的与对象类型相关的字符串转化为对象实例->转化后的对象实例被设置(set)到action中;

第二步:action(Register.action)中的众多字段里,如果是基本数据类型字段的struts2会自动转换为字符串类型字段发送到输出页面(out.jsp), 如果是对象类型字段则会进入action(Register.action)中找转换配置文件(RegisterAction-convertion.properties),在转换配置文件中查找处理此对象数据类型的类(PointConverter.java)---->对象类型抓换类将action中的对象类型字段转换为相应字符串字段---->转换后的字符串实例被get到输出页面。

9.       定义全局类型转换

上面所演示的是局部类型转换方式,假如有四个action,分别为PointAction1、PointAction2、PointAction2、PointAction4,每个PointAction里面都有一个相同的point属性需要转换,所以必须在com.test.action包下面创建四个属性文件指定每个PointAction都需要ActionConvert类进行转换,即:

PointAction1-coversion.properties,PointAction2-coversion.properties, PointAction3-coversion.properties,PointAction4-coversion.properties

如果更多类需要转换,显然这种方式比较累人,这种情况可以考虑使用全局类型转换。

配置步骤:

(1)  在src目录下创建全局属性文件,文件名为:

xwork-conversion.properties 文件名是固定不变的。

(2) 全局属性文件内容:

com.test.bean.Point=com.test.converter.PointConverter2

等号左边是要转换的类所在的包名,右边是具体用那个convert类来转换point。

时间: 2024-11-08 22:54:01

structs2 DefaultTypeConverter类型转换说明的相关文章

More Effective C++

条款一:指针与引用的区别 指针与引用看上去完全不同(指针用操作符'*'和'->',引用使用操作符'.'),但是它们似乎有相同的功能.指针与引用都是让你间接引用其他对象.你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能用指向空值的引用.一个引用必须总是指向某些对象.因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量.相反,如果变量肯定指向一个对象,例如你的设计不允许变量为

Struts2 -- 类型转换

struts2中的类型转换器根接口是:com.opensymphony.xwork2.conversion.TypeConverter. 在web中我们使用beanutils直接将表单数据封装到javaBean中.---类型转换        struts2中action得到请求参数,也可以直接封装到javaBean.            struts2 内部提供大量类型转换器,用来完成数据类型转换问题         boolean 和 Boolean        char和 Charac

struts2的类型转换

1.struts2可以自动转换8大基本数据类型和String以及Date类型 login.jsp: login.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"

Struts2自定义类型转换,和处理类型转换错误

Struts2自定义类型转换: 从前台接受到的类型全部是字符串,Struts2自带的一些基本类型转换有时不能满足我们的特别需要,如:日期字符串输入格式,还有一些自定义的类,直接传到后台,我们需要一些自己的转换器: 例: 我有一个Point类型: package cn.jnit.bean; public class Point { private Integer x; private Integer y; public Point() { } public Point(Integer x, Int

struts2类型转换与校验总结

1.struts2的类型转换分为全部变量转变和局部变量转变. 2.struts2对8中常见的基本类型的属性变量,可以自动转换.如果是User对象,可以手动简历UserAction-coversion.properites等配置文件, Action在继承DefaultTypeConverter,或者StrutsTypeConverter,重载方法实现自定义转换. 3.为什么jsp前台页面的String可以传递到后台,并且转换成对象的属性. 一来可以手动通过自定义类型转换,有一个转换的流程. 4.v

Struts2的类型转换(下)

Struts2提供的类型转换: Struts2提供的是一个名叫StrutsTypeConverter的抽象类,这个类实际上是DefaultTypeConverter的子类.当我们继承自该抽象类 时,要求我们实现下面的两个方法: @Override public Object convertFromString(Map arg0, String[] arg1, Class arg2) { // TODO Auto-generated method stub return null; } @Over

Struts2的类型转换(上)

传统的类型转换.(略) Struts2中提供了内置的基本的类型转换器,可以实现基本类型的自动转换,包括: Integer, Float, Double, Decimal Date and Datetime Arrays and Collections Enumerations Boolean BigDecimal 基于OGNL(对OGNL暂时不熟悉)的类型转换: 以一个User类为例: public class User { private String name; private String

Struts2入门(三)——类型转换

一.前言 笔者一直觉得,学习一个知识点,你首先要明白,这东西是什么?有什么用?这样你才能了解.好了,不说废话. 1.1.类型转换为何存在?什么是类型转换? 在MVC框架中,都是属于表示层解决方案,都需要负责收集用户请求的参数,并且将请求参数传给应用的控制器组件,但是,这里有一个问题,客户端提交的请求参数都是字符串数据类型,而java这门语言本身就是强类型语言,所以我们需要类型转换,就是把字符串类型转化为你所需要的类型. 在MVC框架中,表示层数据处理分为两个方法:客户端输入数据,服务端输出数据:

数据类型转换(日期格式转换)

首先我们先去配置一个自定义类型转换器 public class Dateconverter extends StrutsTypeConverter{ //将前台获取到的值转换成Date类型 private final DateFormat[] dfs={ new SimpleDateFormat("yyyy/MM/dd"), new SimpleDateFormat("yyyy-MM-dd"), new SimpleDateFormat("yyyy年MM月