Struts2:类型转换器
常规的String,int能自动转换,但是,有些类型不是这么简单,比如输入字符串,但需要Date、自定义类型,因此需要自定义类型转换
类型转换器分全局和局部
按惯例,局部的优先级高于全局
需求:
1.输入yyyy-mm-dd,回显yyyy/mm/dd
2.输入电话号码,如果是座机010-11111111,回显(010)11111111
如果是手机,回显18777777777
这里对于需求1,采用局部类型转换器,对于需求2,采用全局类型转环器
Action:C1.java
package org.ah.s2; import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; public class C1 extends ActionSupport implements ModelDriven<Model>{
private Model m;
// ------------------------------------------------------------------
public String m1() {
return "success";
}
@Override
public Model getModel() {
m = new Model();
return m;
}
}
模型层:Model,M2Tel
package org.ah.s2; import java.util.Date; public class Model {
private String uname;
private Date birthday;
private M2Tel tel; public M2Tel getTel() {
return tel;
} public void setTel(M2Tel tel) {
this.tel = tel;
} public String getUname() {
return uname;
} public void setUname(String uname) {
this.uname = uname;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
package org.ah.s2; public class M2Tel {
private String areaCode;
private String telCode; public String getAreaCode() {
return areaCode;
} public void setAreaCode(String areaCode) {
this.areaCode = areaCode;
} public String getTelCode() {
return telCode;
} public void setTelCode(String telCode) {
this.telCode = telCode;
} }
表示层核心代码:
index.jsp
<s:form action="m1Action" method="post">
<s:textfield name="uname" />
<s:textfield name="birthday" label="生日"/>
<input type="date" name="birthday"/>
<s:textfield name="tel" label="电话"/>
<s:submit value="测试Struts控件传值"></s:submit>
</s:form>
infoMsg.jsp
<s:property value="uname" />
<s:property value="birthday" />
<s:date name="birthday" format="MM/dd/yy"/>
<br/>
<s:property value="tel" />
<s:debug></s:debug>
errorMsg.jsp无关大局,略
类型转化器
DataConverter.java
package org.ah.s2; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; public class DataConverter extends StrutsTypeConverter { @Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) { if (arg1[0] != null && !"".equals(arg1[0])) {
// 判断一下要转为哪种类型 assignable:可指定的
if (Date.class.isAssignableFrom(arg2)) {
return stringToDate(arg1[0]);
} else if (M2Tel.class.isAssignableFrom(arg2)) {
return stringToTel(arg1[0]);
}
}
return null;
} private Date stringToDate(String inPara) {
System.out.println("String转为Date");
Date date = null;
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-mm-dd");
try {
date = fmt.parse(inPara);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
} private M2Tel stringToTel(String inPara) {
System.out.println("String转为Tel");
M2Tel tel = new M2Tel(); if (inPara.indexOf("-") < 0) {
// 手机:indexOf("-")等于-1
tel.setTelCode(inPara);
} else {
// 座机
String[] split = inPara.split("-");
tel.setAreaCode(split[0]);
tel.setTelCode(split[1]);
}
return tel; } @Override
public String convertToString(Map arg0, Object arg1) { String format = "";
if (arg1 instanceof Date) {
return deteToString(arg1);
} else if (arg1 instanceof M2Tel) {
return telToString((M2Tel) arg1);
}
return format;
} private String deteToString(Object Obj_in) {
System.out.println("Date转为String");
SimpleDateFormat fmt = new SimpleDateFormat("yyyy/mm/dd");
return fmt.format(Obj_in);
} private String telToString(M2Tel tel) {
System.out.println("Tel转为String");
String format = tel.getTelCode();
String 区号 = tel.getAreaCode();
if (区号 != null && !"".equals(区号)) {
format = "(" + 区号 + ")" + format;
}
return format;
}
}
配置类型转换器:
局部:和Model放在一起;前缀是“模型类名-”;字段对应转换器
Model-conversion.properties
birthday=org.ah.s2.DataConverter
全局:放在src下,固定命名,Model对应转换器
xwork-conversion.properties
org.ah.s2.M2Tel=org.ah.s2.DataConverter
测试一下 :
输入手机,输出
2017/01/01 01/01/17
18777777777
输入座机,输出
2017/01/01 01/01/17
(010)88888888
Struts2:类型转换器的更多相关文章
- 8.Struts2类型转换器
类型转换器1.引入在Struts2中,请求参数类型不仅可以是String,还可以是其它类型.如,定义一个请求参数birthday为Date类型,给其赋值为1949-10-1,则birthday接收到的 ...
- struts2类型转换器、 类型转换错误 以及INPUT view
1.1.1 Struts2中的类型转换器 Struts2内置了常见数据类型多种转换器 boolean 和 Boolean char和 Character int 和 Integer long 和 ...
- Struts2类型转换器
概述 A .从一个HTML 表单到一个 Action 对象,类型转换是从字符串到非字符串. –HTTP没有"类型" 的概念.每一项表单输入只可能是一个字符串或一个字符串数组. ...
- Struts2基础学习(四)—类型转换器和数据校验
一.自定义类型转换器 1.概述 Struts2提供了常规类型转换器,可以用于常用数据类型的转换,但如果目标类型是一个特殊类型,则需要自定义转换器.Struts2 类型转换器实际上都是基于OG ...
- 【Java EE 学习 35 上】【strus2】【类型转换器】【struts2和Servlet API解耦】【国际化问题】【资源文件乱码问题已经解决】
一.类型转换器 1.在动作类action中,声明和表单中name属性的值同名的属性,提供get和set方法,struts2就可以通过反射机制,从页面中获取对应的内容 package com.kdyzm ...
- struts2学习笔记之十一:struts2的类型转换器
Struts2的类型转换器 如何实现Struts2的类型转换器? * 继承StrutsTypeConverter * 覆盖convertFromString和convertToString 注 ...
- Struts2框架的自定义类型转换器
前言:对于java的基本数据类型及一些系统类(如Date类.集合类),Struts2提供了内置类型转换功能,但是也有一定的限制.所以就演示出自定义类型转换器 一.应用于局部类型转换器 eg.用户登录出 ...
- Struts2之类型转换器
一.类型转换器的应用场景 类型转换是OGNL的一部分,默认的八种基本类型.String.Date会使用类型转换,但是更复杂的类型转换就需要我们自定义了(虽然这个东西一般根本用不到),OGNL可以应用在 ...
- Struts2之自定义类型转换器
Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用d ...
随机推荐
- python 使用总结
本人原来是编写java的,后来转到编写ios之后,最后又来编写python了.相对于其他的一些开发人员来说,我精通的语言还是比较杂的. 这里将几个语言进行类比,比较一些个人的看法的东西. 首先obje ...
- HTML5视频Video 音频Audio
视频协议 视频格式 Flash HTML5 HTTP flv HTTP f4v HTTP mp4 HTTP m3u8 HTTP webm HTTP ogg RTMP flv RTMP f4v RTMP ...
- 记录并分享一下安卓通讯录导入到IPhone
仅仅记录一下我自己的步骤: 前提:我开始用的是诺基亚1202,黑白屏的功能机: 1.将卡放到安卓手机里面,用应用宝导出全部联系人为VCF后缀文件: 2.下载ITools,用它连接IPhone,导入到I ...
- 【python】PIL 批量绘制图片矩形框工具
工具采用PIL:Python Imaging Library,图像处理标准库.PIL功能非常强大,但API却非常简单易用. 安装PIL 在Debian/Ubuntu Linux下直接通过apt安装 $ ...
- FZU-2075 Substring(后缀数组)
Description Given a string, find a substring of it which the original string contains exactly n such ...
- About SQLite
About SQLite See Also... Features When to use SQLite Frequently Asked Questions Well-known Users Boo ...
- ASP.NET(转自wiki)
ASP.NET是由微软在.NET Framework框架中所提供,开发Web应用程序的类库,封装在System.Web.dll文件中,显露出System.Web名字空间,并提供ASP.NET网页处理. ...
- 从0和1到Python
什么是编程语言? 举一个例子: 如果我们不会英语,和一个不会中文的老外交流,怎么办?找个翻译. 电脑只懂0和1组成的机器语言. 用0和1告诉计算机做事很累:人类语言易了解,学习快,效率高. 如果定义一 ...
- Windows 2012 中文乱码的解决办法
背景:服务器安装2012 R2英文环境,软件为中文显示.已下载中文语言包安装到服务器上 现象:TXT文档的中文在服务器上打开显示为乱码,复制到本地电脑上可正常显示 解决办法:控制面板-语言-更改日期. ...
- hadoop streaming 多路输出 [转载]
转载 http://www.cnblogs.com/shapherd/archive/2012/12/21/2827860.html hadoop 支持reduce多路输出的功能,一个reduce可以 ...