Struts2 自定类型转换器(三十四)

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>


[color=red]7.Action范围的 类型转换器配置文件 --放在 和action同目录下
ActionName-conversion.properties (命名规则)[/color]

#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
就会看到文本框中是经过转换后的值

[color=red]13.全局范围的类型转换器属性文件 (放在src目录下就可以了)
固定的名称 :xwork-conversion.properties[/color]

#应用程序中的素有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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值