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 ...
随机推荐
- 较老版本的AFNetworking使用心得
较老版本的 AFNetworking 下载链接 ( http://pan.baidu.com/s/14Cxga ) 将压缩包中的文件夹拖入xcode工程项目中并引入如下的框架 简单的 JOSN 解析例 ...
- applicationCache对象
applicationCache对象代表了本地缓存,可以在js中进行一些操作.可以用它来通知用户本地缓存中已经被更新,也允许用户手工更新本地缓存.applicationCache.addEventLi ...
- php 函数strpos()
strpos() 函数查找字符串在另一字符串中第一次出现的位置. strpos(string,find,start) 返回 从string中的start位置开始找find第一次出现的位置 注意: s ...
- UIPickerView控件中自定义展示的字体大小及样式
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger) ...
- echo '<script>alert("插入成功")</script>';
echo '<script>alert("插入成功")</script>'; <?php if ( ! defined('BASEPATH')) ex ...
- Python图片处理
Python图像处理库PIL基本使用 #将图片转换为灰度图像 from PIL import Image pil_im = Image.open('cat.jpg') gray_cat = pil_i ...
- CocoaPods 抛出[!] Unable to satisfy the following requirements: 错误
今天使用CocoaPods管理ReactiveCocoa,抛出以下错误 [!] Unable to satisfy the following requirements: - `ReactiveCoc ...
- MVC授权
public class CommonController : Controller { protected override void OnAuthorization(AuthorizationCo ...
- JSPatch – 动态更新iOS APP
原文:http://blog.cnbang.net/works/2767/ JSPatch是最近业余做的项目,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的 ...
- CefSharp 初用遇到的一些问题及解决方法
之前用WebBrowser,打开网页很卡,但因为并是太要求速度和体验,所以可以显示html就可以了.但是,现在要求显示速度,最主要问题是WebBrowser控件的UserAgent,其实并不完全是IE ...