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>


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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值