Struts2之局部与全局类型转换器

定义一个测试类

package struts2.example.action;

import java.util.Date;

public class HelloWorldAction {

    private Date birthday;

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		System.out.print(birthday);
		this.birthday = birthday;
	}

	public String execute() throws Exception{
		return "success";
	}
}

在struts.xml文件里定义

<action name="list_*" class="struts2.example.action.HelloWorldAction" method="{1}">

<!-- 定义处理结果与视图资源之间的关系 -->

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

</action>

运行时在网址输入http://localhost:端口号/工程名/..(命名空间)../list_execute.action?birthday=20121181即可完成跳转,在index.jsp通过el表达式 ${birthday }输出相应的birthday的值,输出的是带星期等其他信息的数据,不是原来的字符串。应用类型转换器能够实现数据的双向转换。

类型转换器分为两种

局部类型转换器:对某个action起作用

全局类型转换器:对所有的action起作用

所谓类型转换器就是继承一个类DefaultTypeConverter,然后重写方法实现。应用类型转换器会有两种情况:

1、由请求参数的值转换成属性的值

2、使用struts2的标签,进行数据回显

package struts2.example.type.converter;

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

public class DateTypeConverter extends DefaultTypeConverter{

	@Override
	public Object convertValue(Map<String, Object> context, Object value,
			Class toType) {
		// TODO Auto-generated method stub
		SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyyNNdd");
		try{
			if(toType==Date.class){//将String类型转换成Date类型
				String[] params=(String[]) value;
				return simpleDateFormat.parse(params[0]);
			}else if(toType==String.class){//将Date类型转换成String类型
				Date date=(Date) value;
				return simpleDateFormat.format(date);
			}
		}catch(ParseException e){

		}
		return null;
	}
}

与Struts1一样,在Struts2中也需要注册。注册局部类型转换器

在action类所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是

Action的类名,后面的-conversion.properties是固定写法,对于本例而言,文件的名称应

为HelloWorldAction.properties。

在properties文件中的内容为:属性名称=类型转换器的全类名

对于本例而言,HelloWorldAction-conversion.properties文件中的内容为:

birthday=struts2.example.type.converter.DateTypeConverter

自定义全局类型转换器:在WEB-INF/classes下放置xwork-conversion.properties文件,在properties文件中

的内容为:待转换的类型=类型转换器的全类名

对本例而言,xwork-conversion.properties文件中的内容为:

java.util.Date=struts2.example.type.converter.DateTypeConverter

另外,使用全局类型转换器要注意输入的数据格式符号要求。

时间: 2024-10-03 14:14:44

Struts2之局部与全局类型转换器的相关文章

struts局部、全局类型转换器

第01步:编写bean package com.self.bean; import java.util.Date; public class User { private Date birthday = null; public Date getBirthday() { System.out.println("获得-User:" + birthday); return birthday; } public void setBirthday(Date birthday) { System

struts2继承StrutsTypeConverter实现自定义类型转换器

1.编写converter类继承StrutsTypeConverter,重写convertFromString和convertToString方法. 2.配置类型转换器: 局部配置:在action所在包下编写 ActionClassName-conversion.properties文件 配置内容:属性名=转换器全路径 全局配置:在src目录下编写 xwork-conversion.properties文件 配置内容:被转换类=转换器全路径 [注意]页面显示要用struts2标签,否则会出现co

struts2自定义类型转换器

首先,何为struts2的类型转换器? 类型转换器的作用是将请求中的字符串或字符串数组参数与action中的对象进行相互转换. 一.大部分时候,使用struts2提供的类型转换器以及OGNL类型转换机制即可满足大部分类型转换需求.如: 类User.java package models; public class User { private String username; private String password; public String getUsername() { retur

Struts2 自定义类型转换器

Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性 用date类型是可以接收到的,但是如果传的是20101112这样类型的字符串,用date类型是获取不到,并且会出现错误的,struts2提供了一 种类型转换器供我们使用. 以下为局部类型转换器的开发步骤a.首先要写一个类来继承DefaultTypeConverterb.然后覆盖convertValue

struts2学习笔记之十一:struts2的类型转换器

Struts2的类型转换器 如何实现Struts2的类型转换器? * 继承StrutsTypeConverter * 覆盖convertFromString和convertToString 注册类型转换器 * 局部类型转换器,局部类型转换器只对当前Action起作用,需要提供如下配置文件: MyActionName-conversion.properties,MyActionName指需要使用转换器的Action名称 "-conversion.properties"固定字符串,不能修改

自定义struts2类型转换器

一.自定义类型转换器 1.编写一个类,继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter 2.覆盖掉其中的public Object convertValue(Map<String, Object> context, Object value,Class toType) context:OGNL表达式的上下文 value:实际的值.用户输入的都是字符串,但他是一个String数组. toType:目标类型 public 

8.Struts2类型转换器

类型转换器1.引入在Struts2中,请求参数类型不仅可以是String,还可以是其它类型.如,定义一个请求参数birthday为Date类型,给其赋值为1949-10-1,则birthday接收到的不是字符串“1949-10-1”,而是日期类型.但,需注意的是,对于基本数据类型,需将其定义为包装类型.实例:请求参数值的类型-- typeconverterStep1:编写index.jsp与show.jspStep2:编写Birthday_ActionStep3:编写web.xml与struts

struts2类型转换器

类型转换器分为全局类型转换器和局部类型转换器.全局类型转换针对所有Action都起作用,而局部类型转换器针对某个Action 一.全局类型转换器.将字符串x,y转换成Point Login.jsp页面 <s:form method="post" action="test"> <s:textfield name="username" label="账号"></s:textfield> <

自己定义struts2中action类型转换器

DateAction.java中代码例如以下: package com.itheima.action; import java.util.Date; public class DateAction { private Date time; public Date getTime() { return time; } public void setTime(Date time) { this.time = time; } public String execute() { return "succ