`

struts2自定义类型转换器

阅读更多

struts有两种类型转换器:局部类型转换器和全局类型转换器。

下面的action中使用到了枚举类型Gender,当需要将请求参数注入到gender属性时,我们必须定义转换器,否则struts2无法自动完成类型转换。

action代码如下所示:

public class TestAction {

	private Gender gender;
	public Gender getGender() {
		return gender;
	}
	public void setGender(Gender gender) {
		System.out.println(gender.getClass().getName());
		this.gender = gender;
	}
	
	public String execute(){
		return "success";
	}
}

 enum Gender {
	MAN,WOMEN
}

 下面定义了一个针对Gender类型的类型转换器,代码如下所示:

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

public class GenderConverter extends DefaultTypeConverter {

	@SuppressWarnings("unchecked")
	@Override
	public Object convertValue(Map<String, Object> context, Object value,
			Class toType) {
		if(toType == Gender.class){//当字符串向Gender类型转换时
			String[] params = (String[]) value;
			return Gender.valueOf(params[0].toUpperCase());
		}else if(toType == String.class){//当Gender转换成字符串时
			Gender gender = (Gender) value;
			return gender.toString();
		}
		return null;
	}
}

在struts.xml文件中注册action,代码如下:

<package name="myDemo" namespace="/demo" extends="struts-default">
		<action name="test" class="demo.action.TestAction">
		<result>/WEB-INF/jsp/result.jsp</result>
		</action>
	</package>

 from.jsp页面中的代码如下:

<body>
<form action="<%=request.getContextPath() %>/demo/test.action" method="get">
	性别:<input type="text" name="gender"></input>
	<input type="submit" name="submit" value="提交"></input>
</form>
</body>

 result.jsp页面的代码如下所示:

<body>
性别:${gender}
</body>
 

 自定义的类型转换器推荐继承自:com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter

1。将上面的类型转换器注册为局部类型转换器:
在Action类所在的包下放置ActionClassName-conversion.properties文件 ,ActionClassName是Action的类名,后面的-conversion.properties是固定写法,对于本例而言,文件的名称应为TestAction-conversion.properties 。在properties文件中的内容为:
属性名称=类型转换器的全类名
对于本例而言, TestAction-conversion.properties文件中的内容为:
gender=demo.action.GenderConverter

此时访问from.jsp页面,在输入框中输入man,点击提交,则在result.jsp页面中会显示:性别:MAN,同进控制台会打印出如下信息:demo.action.Gender

说明字符串"man"已正确转换成"Gender".

 

2.将上面的类型转换器注册为全局类型转换器:
在WEB-INF/classes下放置xwork-conversion.properties文件 。在properties文件中的内容为:
待转换的类型=类型转换器的全类名
对于本例而言, xwork-conversion.properties文件中的内容为:
demo.action.Gender=demo.action.GenderConverter

 

示例2:

<1> 下面的action需要将值为20090528格式的请求参数注入到createtime属性,我们必须定义类型转换器,否则struts2无法自动完成类型转换。

import java.util.Date;

public class HelloWorldAction {

       private Date createtime;

       public Date getCreatetime() {

              return createtime;

       }

       public void setCreatetime(Date createtime) {

              this.createtime = createtime;

       }

}

 <2> 类型转换器

public class DateConverter extends DefaultTypeConverter {

                @Override  public Object convertValue(Map context, Object value, Class toType) {

              SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

              try {

                     if(toType == Date.class){//当字符串向Date类型转换时

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

                            return dateFormat.parse(params[0]);

                     }else if(toType == String.class){//当Date转换成字符串时

                            Date date = (Date) value;

                            return dateFormat.format(date);

                     }

              } catch (ParseException e) {}

              return null;

       }

}

 <3> 将上面的类型转换器注册为局部类型转换器:

在Action类所在的包下放置ActionClassName- conversion.properties文件,ActionClassName是Action的类名,后面的 -conversion.properties是固定写法,对于本例而言,文件的名称应为HelloWorldAction- conversion.properties 。在properties文件中的内容为:

属性名称=类型转换器的全类名

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

createtime= cn.itcast.conversion.DateConverter

<4> 将上面的类型转换器注册为全局类型转换器:

在WEB-INF/classes下放置xwork-conversion.properties文件。在properties文件中的内容为:

待转换的类型=类型转换器的全类名

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

java.util.Date= cn.itcast.conversion.DateConverter

 

分享到:
评论

相关推荐

    Struts自定义类型转换器

    对于Struts1和Struts2中都讲到了自定义类型转换器。但是有些人可能对自定义类型转换器的运行原理不理解,这里进行简单介绍一下……

    struts 2.0 自定义类型转换器 注册类型转换器 入门实例 简单实例

    struts 2.0 自定义类型转换器 注册类型转换器 入门实例 简单实例

    自定义类型转换器

    Struts2自定义类型转换器 如果用户登陆后,可以访问Action中的所有方法,如果用户没有登陆,不允许访问Action中的方法。并且提示你没有权限执行该操作!

    struts2自定义类型转换、拦截器实例练习

    myeclipse平台下使用struts2.3框架搭建实例,理解struts2工作原理,了解struts2自定义类型转换,自定义拦截器,掌握struts2的mvc框架应用

    传智播客struts2.1源代码_自定义类型转换器

    传智播客struts2.1源代码_自定义类型转换器

    Struts 自定义转换器

    Struts 自定义转换器Struts 自定义转换器

    Struts的自定义转换器

    Struts的自定义转换器 public class LineConvertor extends StrutsTypeConverter{...}

    struts2中的类型转换器

    对于基本数据类型 strus2可以自动的将其转换成所需要的类型,但是我们自己定义的引用数据类型无法转换,本文详细介绍了strus2的自定义类型转换器

    Struts2类型转换与输入校验 .zip

    (1) 编写一个自定义类型转换器,并基于应用程序进行全局配置,实现字符串参数与颜色值之间的转换,并将颜色值应用于视图当中。 (2) 根据实验四的图书管理系统,扩展图书新增功能,要求对新增页面表单中的每个...

    Struts2学习教程之自定义类型转换器的方法

    类型转换器的作用是将请求中的字符串或字符串数组参数与action中的对象进行...下面这篇文章主要给大家介绍了关于Struts2学习教程之自定义类型转换器的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

    实验4 Struts2的类型转换与OGNL表达式语言.doc

    1、 理解Struts2的类型转换类型 2、 理解局部类型转换器与全局类型转换器的区别 3、 掌握Struts2的自定义类型转换 4、 理解OGNL表达式语言

    一篇文章搞定Struts2的类型转换

    主要介绍了关于Struts2类型转换的相关资料,文中主要介绍了Struts2的类型转换器和自定义类型转换器的实现,有需要的朋友可以参考借鉴,下面来一起看看吧。

    struts2全局转换的问题

    测试源代码 博文链接:https://gyj129129.iteye.com/blog/225216

    自定义struts时间转换器

    自定义的struts时间转换器,轻松实现java中时间的转换。

    自己写的struts2类型转换器

    服务器可以接收到的来自用户的数据只能是字符串或者是字符串数组,而在服务器上的对象中 ,这些数据往往有多种不同的类型,如日期(Date) 整数(int) 浮点数... 要实现 上述的转换 ,Struts2中 提供了 converter。

    struts2 详解文档

    自定义类型转换器 全局类型转换器 访问或添加几个属性 文件上传 多文件上传 自定义拦截器 对Action中所有方法进行输入校验 对Action指定方法进行校验 输入校验的流程 基于XML配置方式实现对action的所有...

    Struts2全解Struts2全解

    1、struts2概述 Struts2 软件下载 Struts2 比较重要的类 操作步骤及框架配置 struts运行机制 2、简单的struts2程序 ...9 struts2类型转换 ........ 10struts2标签库 ........ 11、访问数据库 ........

    Struts2 in action中文版

    5.4.3 配置框架使用自定义转换器 103 5.5 小结 106 第三部分 构建视图——标签和结果 第6章 构建视图——标签 108 6.1 入门 108 6.1.1 ActionContext和OGNL 109 6.1.2 虚拟对象ValueStack 111 6.2 Struts 2标签概要...

Global site tag (gtag.js) - Google Analytics