struts2类型转换2
如何自定义类型转换器 ? 
	1). 为什么需要自定义的类型转换器 ? 因为 Struts 不能自动完成 字符串 到 引用类型 的 转换.
	2). 如何定义类型转换器:
	I.  开发类型转换器的类: 扩展 StrutsTypeConverter 类.
	II. 配置类型转换器: 
	有两种方式
	①. 基于字段的配置: 
		> 在字段所在的 Model(可能是 Action, 可能是一个 JavaBean) 的包下, 新建一个 ModelClassName-conversion.properties 文件
		> 在该文件中输入键值对: fieldName=类型转换器的全类名. 
		> 第一次使用该转换器时创建实例. 
		> 类型转换器是单实例的!
②. 基于类型的配置:
		> 在 src 下新建 xwork-conversion.properties
		> 键入: 待转换的类型=类型转换器的全类名.
		> 在当前 Struts2 应用被加载时创建实例.
老版本的struts2项目中常用来对Date日期类型做转换,而在新版本的struts2项目中,实际上
是对于日期类型不需要类型转换器,因为常用的日期值2018-03-16 20:11:49和2018-03-16
这种struts2可以自动类型转换成Date类型。
官网原文:
内置类型转换支持
类型转换由XWork实现。XWork会自动为您处理最常见的类型转换。这包括对以下各项的字符串转换支持:
串
布尔值/布尔值
字符/字符
int / Integer,float / Float,long / Long,double / Double
日期 - 使用与当前请求关联的语言环境的SHORT格式(详细见java分类下的日期格式汇总)
数组 - 假设单个字符串可以转换为单个项目
集合 - 如果不能确定对象类型,则假定它是一个字符串,并创建一个新的ArrayList>请注意,对于数组,类型转换将按照数组元素的类型并尝试单独转换每个项目>。与任何其他类型转换一样,如果无法执行转换,则使用标准类型转换>错误报告来指示处理类型转换时发生的问题。
枚举
BigDecimal和BigInteger
老项目中常用的类型转换方式是②基于类型的配置:定义日期类型转换
常用工具类1:
package com.utils; import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map; import javax.servlet.ServletContext; import org.apache.struts2.ServletActionContext;
import org.apache.struts2.util.StrutsTypeConverter; public class DateConverter extends StrutsTypeConverter { private DateFormat dateFormat; public DateConverter() {
System.out.println("DateConverter's constructor...");
} public DateFormat getDateFormat(){
if(dateFormat == null){
//获取当前 WEB 应用的初始化参数 pattern(即web.xml的pattern)
ServletContext servletContext = ServletActionContext.getServletContext();
System.out.println(servletContext);
String pattern = servletContext.getInitParameter("pattern");
dateFormat = new SimpleDateFormat(pattern);
} return dateFormat;
} @Override
public Object convertFromString(Map context, String[] values, Class toClass) { System.out.println("convertFromString..."); if(toClass == Date.class){
if(values != null && values.length > 0){
String value = values[0];
try {
return getDateFormat().parseObject(value);
} catch (ParseException e) {
e.printStackTrace();
}
}
} //若没有转换成功, 则返回 values
return values;
} @Override
public String convertToString(Map context, Object o) { System.out.println("convertToString..."); if(o instanceof Date){
Date date = (Date) o;
return getDateFormat().format(date);
} //若转换失败返回 null
return null;
} } web.xml中定义要转换的日期格式:
  <context-param>
		  <param-name>pattern</param-name>
		  <param-value>yyyy-MM-dd hh:mm:ss</param-value>
	  </context-param>
常用工具类2:
package com.utils; import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map; import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; public class MyDateConverter extends DefaultTypeConverter {
private static final DateFormat[] ACCEPT_DATE_FORMATS = new DateFormat[]{
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),
new SimpleDateFormat("yyyy-MM-dd HH:mm a"), new SimpleDateFormat("yyyy-MM-dd HH:mm"),
new SimpleDateFormat("dd/MM/yyyy"), new SimpleDateFormat("yyyy-MM-dd"), new SimpleDateFormat("yyyy/MM/dd")}; public Object convertValue(Map context, Object value, Class toType) {
if (toType != Date.class) {
if (toType == String.class) {
Date arg11 = (Date) value;
return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(arg11);
} else {
return null;
}
} else {
String date = null;
String[] params = (String[]) ((String[]) value);
date = params[0];
DateFormat[] arg5 = ACCEPT_DATE_FORMATS;
int arg6 = arg5.length;
int arg7 = 0; while (arg7 < arg6) {
DateFormat format = arg5[arg7]; try {
return format.parse(date);
} catch (Exception arg10) {
++arg7;
}
} return null;
}
}
}
注意:
1,还需要在src下编写xwork-conversion.properties
内容举例如下:
  java.util.Date =com.utils.MyDateConverter
  #java.util.Date =com.utils.DateConverter
2,注意由后台的对象转成页面显示的String类型,要想类型转换器起作用。必须使用ognl
而不是el。
struts2类型转换2的更多相关文章
- Struts2系列笔记(7)---Struts2类型转换
		Struts2类型转换 struts2中内置了大量的类型转换器用来完成数据类型转换的问题,这篇随笔主要通过两个方面来写Struts类型转换 1:Struts2内置的类型转换器 2:如何自定义 ... 
- 14.怎样自学Struts2之Struts2类型转换[视频]
		14.怎样自学Struts2之Struts2类型转换[视频] 之前写了一篇"打算做一个视频教程探讨怎样自学计算机相关的技术",优酷上传不了.仅仅好传到百度云上: http://pa ... 
- struts2类型转换
		1. Struts2中的类型转换 我们知道通过HTTP提交到后台的数据,都是字符串的形式,而我们需要的数据类型当然不只字符串类型一种.所以,我们需要类型转换! 在Struts2中,类型转换的概念除了用 ... 
- struts2 类型转换
		概述 从一个 HTML 表单到一个 Action 对象, 类型转换是从字符串到非字符串. 在 struts2 中, 把请求参数映射到 action 属性的工作由 Parameters 拦截器负责, ... 
- struts2类型转换与校验总结
		1.struts2的类型转换分为全部变量转变和局部变量转变. 2.struts2对8中常见的基本类型的属性变量,可以自动转换.如果是User对象,可以手动简历UserAction-coversion. ... 
- struts2类型转换中的错误处理
		由于类型转换过程中有可能出现原始参数无法转换为目标类型的错误,所以struts2提供了类型转换中的异常处理机制. 在struts2的默认配置文件struts-default.xml中有如下一段配置代码 ... 
- java学习笔记 (2) —— Struts2类型转换、数据验证重要知识点
		1.*Action.conversion-properties 如(point=com.test.Converter.PointListConverter) 具体操作类的配置文件 2.*Action. ... 
- struts2  之 struts2类型转换
		1. 在struts2中,相比servlet来时,获取数据时,程序员没有进行手动的类型转换,类型转换工作都有struts2来完成处理,但愿对于自定义类型数据,struts2不会帮助我们完成类型转换工作 ... 
- 【学习笔记】Struts2 类型转换
		为什么需要类型转换 在基于HTTP协议的Web应用中 客户端请求的所有内容(表单中提交的内容等)都以文本编码的方式传输到服务器端但服务器端的编程语言(如Java)有着丰富的数据类型 如 int boo ... 
- struts2类型转换+校验
		1.action中validate()与validateXxx() 用于action执行前的校验,如果校验失败,跳到input视图, 前者校验整个Action: 后者校验该Action中的Xxx方法. ... 
随机推荐
- 基于角色访问控制的OA系统的设计与实现
			摘要:随着电子政务的快速发展和全面普及,办公自动化(OA)系统的安全性显得越来越重要.对基于Web 的B/S 结构的OA 系统结构和安全需求进行了分析,为了增强用户身份鉴别和授权控制的安全性,分析了基 ... 
- css渐变写法 从左到右渐变三种颜色示例;
			background:linear-gradient(to right,#7f06a8,#a02bc2,#7f06a8) 
- 《代码大全2》读书笔记 Week2
			<代码大全2>第四.五章 第四章“关键的‘构建’决策”主要有以下三要点:1.每种编程语言都有优点和缺点,程序员应根据需要选择编程语言,尽量选择熟悉的语言以提高生产效率.作为一种表达工具,编 ... 
- 前端自动化构建工具——gulp环境搭建教程
			gulp是前端工程化的工具,它可以对html,css,js等代码和图片进行压缩,也可以对sass和less等预处理语言进行编译,代码部署.gulp学起来简单,用起来方便,大大提高我们工作效率. 这里可 ... 
- 组合,模板,bolck块
			如果前面和后面的变量名相同,则后面的变量名会覆盖前面的变量名 模板可以多次使用,只需要将is指定template的name,就可以重复使用该模板,只需要将不同的item值赋值给data就可以实现. 可 ... 
- ORACLE check view
			select owner as schema_name, view_name from sys.all_views where VIEW_NAME like 'P%' order by ... 
- 微服务(Microservices)和服务网格(Service Mesh)的架构概念
			注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ... 
- pycharm破解教程
			转载 查询 https://blog.csdn.net/u014044812/article/details/86679150 
- 5. java运算符
			1.算术运算符 注意: % 取余数 (1)自增 (++)前自增:先自增完毕,再运算整个表达式,语句分号前面的都是运算表达式: 后自增,先运算完整个表达式(分号前面的都是表达式),再进行自增: 2.赋值 ... 
- vue+elementui 中 @keyup  键盘上下左右移动聚焦
			<template> <el-table :data="CreditUnclearOutlineList" border style="width: 1 ... 
