`
Luob.
  • 浏览: 1584288 次
  • 来自: 上海
社区版块
存档分类
最新评论

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
1
7
分享到:
评论

相关推荐

    使用struts2进行数据类型转换

    Struts2提供了内置的类型转换机制,以及自定义类型转换器的能力,以便开发者能够灵活地处理各种类型的数据。 1. **OGNL(Object-Graph Navigation Language)**: OGNL是Struts2中用于表达式语言的核心组件,它...

    自己写的转换器,包含各种基本的数据类型。

    标题中提到的“自己写的转换器”很可能就是针对Struts1框架的一个自定义类型转换器实现。这样的转换器能够帮助开发者更方便地处理不同数据类型的转换工作,尤其是在处理用户表单提交的数据时,可以将前端传入的字符...

    Struts类型转换

    默认情况下,Struts2提供了多种内置的转换器,可以处理基本数据类型和一些常见的Java对象,如Date、File等。当Action类的属性与请求参数类型不匹配时,Struts2会自动寻找合适的转换器进行转换。 **转换器的注册和...

    Struts2视频教程

    - **类型转换和验证**:Struts2支持自定义类型转换器,可以将用户输入的数据转换为所需的类型;同时还提供了一套强大的验证机制,确保用户输入的数据符合预期格式。 #### 五、Struts2实战经验 - **国际化**:通过...

    struts2总结大全

    Struts2允许自定义类型转换器,以便在Action属性和请求参数之间进行数据转换。局部类型转换器针对特定Action类的某个属性,而全局类型转换器则对所有Action类生效。通过实现`Converter`接口或扩展`...

    struts2jar包

    2. **xwork-core.jar**:XWork是Struts2的基础,它提供了一些基础功能,如类型转换、Ognl表达式支持、拦截器机制等。很多Struts2的功能都是基于XWork实现的。 3. **ognl.jar**:OGNL(Object-Graph Navigation ...

    struts2.0开发最精简教程 转换器篇

    在Struts2中,转换器(Converter)扮演着数据绑定和格式化的重要角色,使得开发者能够对输入的数据进行有效控制和处理。本教程主要聚焦于Struts2的转换器开发,适合那些已经具备Java基础知识并希望通过MyEclipse IDE...

    Struts2 demo2

    通过这些知识点,我们可以了解到"Struts2 demo2"可能涵盖了Struts2的核心特性,如Action配置、数据校验、类型转换、OGNL表达式、防止重复提交和自定义标签库的使用。这些内容对于理解和实践Java web开发中的MVC模式...

    转换器(Converter)——Struts 2.0中的魔术师

    转换器是Struts 2提供的一个接口,用于处理ActionForm或模型对象中属性的数据类型转换。在表单提交时,如果用户输入的数据与预期的数据类型不符,转换器就会介入,尝试将用户输入的数据转换为正确的类型。此外,转换...

    struts2-core-2.0.11源码

    9. **类型转换(Type Conversion)**:Struts2提供了一套强大的类型转换机制,位于`org.apache.struts2.convention.converters`包下,可以自动将请求参数转换为Action属性的期望类型。 10. **注解支持(Annotations...

    Migrating From Struts1 To Struts2

    - **功能增强**:Struts2引入了更多的内置特性,如拦截器、结果类型等,减少了自定义组件的需求。 - **安全性改善**:Struts2提供了更为强大的安全机制,有助于防止常见的Web攻击。 - **社区支持**:尽管WebWork/...

    struts1与struts2本质区别

    - **Struts1**:使用Commons-Beanutils进行类型转换,每个类一个转换器,转换器不可配置。 - **Struts2**:使用OGNL进行类型转换,支持基本数据类型和常用对象之间的转换,并且具有更高的灵活性。 #### 九、数据...

    STRUTS2优缺点

    - **OGNL 支持的数据转换:**STRUTS2 的数据转换机制更加灵活,支持 OGNL 表达式,这为复杂的数据类型转换提供了更多可能性。 **8. 验证框架:** - **内置验证框架:**STRUTS2 内置了 XWork 验证框架,提供了更为...

    struts2教程我在培训时用的

    - **基于Struts2的类型转换器**:使用框架内置的类型转换器。 - **使用OGNL语言来转换类型**:通过OGNL表达式来定义复杂的类型转换逻辑。 **4.2 拦截器应用** - **拦截器的实现原理**:拦截器是一种在Action执行...

Global site tag (gtag.js) - Google Analytics