1.Struts2中的类型转换器的注册方法
注册局部类型转换器 比如: action范围
注册全局类型转换器 比如: 整个应用程序
2.编写 自定义类型转换器类 继承 DefaultTypeConverions 类
(将 一个String类型的变量,封装到 User POJO对象中
实现: 将字符串 “用户名,密码” <==>封装到 User 的 name 和 pwd 属性中)
package com.sh.conversion;
import java.util.Map;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
import com.sh.pojo.User;
public class UserConversion extends DefaultTypeConverter {
@Override
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
if(toType==User.class){
String [] params=(String[])value;
User user=new User();
String [] userValue=params[0].split(",");
user.setName(userValue[0]);
user.setPwd(userValue[1]);
return user;
}
else if(toType==String.class){
User user=(User)value;
return "<"+user.getName()+","+user.getPwd()+">";
}
return null;
}
}
3.编写日期转换类 将 yyyy-mm-dd hh:mm:ss <==> Date
package com.sh.conversion;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
import com.sun.xml.internal.fastinfoset.stax.events.Util;
public class DateConversion extends DefaultTypeConverter {
@Override
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
SimpleDateFormat df=new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
try {
if(value!=null){
if(toType==Date.class){
String [] params=(String[])value;
String param=params[0];
if(!Util.isEmptyString(param)){
return df.parse(param);
}else
return null;
}
else if (toType==String.class) {
Date date=(Date)value;
return df.format(date);
}
}
} catch (Exception e) {
e.printStackTrace();;
}
return null;
}
}
4.pojo
package com.sh.pojo;
import java.util.Date;
public class User {
private String name;
private String pwd;
private Date birthday;
//get set
}
5.action
package com.sh.action;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
import com.sh.pojo.User;
public class UserAction extends ActionSupport {
private User user;
private String message;
private Date date;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
if(getUser()!=null){
this.message="欢迎你!"+user.getName()+"你的密码是:"+user.getPwd();
return SUCCESS;
}
else{
user=new User();
user.setName("admin");
user.setPwd("123456");
date=new Date();
return INPUT;
}
}
//get set
}
6.struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 如果 注解的action配置改变时候不需要重新启动tomcate -->
<constant name="struts.devMode" value="false"/>
<constant name="struts.convention.classes.reload" value="true" />
<package name="default" extends="struts-default">
<action name="userAction" class="com.sh.action.UserAction">
<result>/success.jsp</result>
<result name="input">/login.jsp</result>
</action>
</package>
</struts>
7.Action范围的 类型转换器配置文件 –放在 和action同目录下
ActionName-conversion.properties (命名规则)
#Object--String
user=com.sh.conversion.UserConversion
# 注册action中的复合类型的转换器(String <=> Date)
user.birthday=com.sh.conversion.DateConversion
#注册action中常用 date 的转换器(String <=> Date)
date=com.sh.conversion.DateConversion
8.login.jsp
<body>
<s:form action="userAction" method="post">
用户名:<s:textfield name="user"/><br/>
复合生日:<s:textfield name="user.birthday"/><br/>
常用日期:<s:textfield name="date"/><br/>
<s:submit value="提交"/>
</s:form>
</body>
9.success.jsp
<body>
Object -- String: ${message}<br/>
复合类型:${user.birthday }<br/>
常用类型:${date }
</body>
10.访问地址 (string —>Date,Object)
–http://localhost:8080/Struts2_UserdefinedConversion/login.jsp
–依次 填入
admin,123456
2012-08-20 23:23:23
2012-08-25 00:00:00
==提交
11.就会看到效果
Object – String: 欢迎你!admin你的密码是:123456
复合类型:Fri Jan 20 23:23:23 CST 2012
常用类型:Wed Jan 25 00:00:00 CST 2012
12.访问地址(Date,Object–String)
–http://localhost:8080/Struts2_UserdefinedConversion/userAction.action
就会看到文本框中是经过转换后的值
13.全局范围的类型转换器属性文件 (放在src目录下就可以了)
固定的名称 :xwork-conversion.properties
#应用程序中的素有User对象的birthday
com.sh.pojo.User.birthday=com.sh.conversion.DateConversion
#应用程序中的所有date类型
java.util.Date=com.sh.conversion.DateConversion
#应用程序中的所有User的 name,pwd
com.sh.pojo.User=com.sh.conversion.UserConversion
14.测试全局的时候 将局部的转换的属性文件中 给注释 然后再测试
//(string --->Date,Object)
--http://localhost:8080/Struts2_UserdefinedConversion/login.jsp
//(Date,Object--String)
--http://localhost:8080/Struts2_UserdefinedConversion/userAction.action