Struts中的Converter类型转换(两种方式)

1.要建一个类型转换类:分两种方式.下文中都有,任选其一即可.
1.)让该类直接继承DefaultTypeConverter
2.)让该类直接继承StrutsTypeConverter

原理都是实现了converterValue()这个方法.

只是继承StrutsTypeConverter的这种方式用起来更方便一些.他是在其内部实现的converterValue().
外部是重写了convertFromString()与convertToString()这两个方法.可以达到对象与字符串互相转换的效果.

而继承DefaultTypeConverter的这种方式是直接实现的converterValue().
需要在一个方法中通过判断来实现对象与字符串的互相转换.

2.为需要转换的变量指定配置文件.
该配置文件的命名规则:在对应的Action包下建立ActionClass-conversion.properties




<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"  %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
  </head>
  
  <body>
  <!-- action为login.action 找的是struts.xml中action元素的name属性对应的class类名 -->
 	<s:form action="strutsConverter" theme="simple">
 		用户名:<s:textfield name="loginName" /> <br />
 	      登录时间:<s:textfield name="loginTime" /> <br />
 	      <s:submit value="登录" />
 	</s:form>
  </body>
</html>


<?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>
	
	<package name="struts2" namespace="/" extends="struts-default" >
		<action name="strutsConverter" class="org.struts2.action.LoginAction">
			<result>/success.jsp</result>
		</action>
	</package>
</struts>


LoginAction-conversion.properties配置文件
#Action类-conversion.properties的命名规则.
#键:loginTime为要转换的变量.
#值:org.struts2.type.converter.DateTypeConverter该属性对应的类型转换器类.
#loginTime=org.struts2.type.converter.DateTypeConverter
loginTime=org.struts2.type.converter.StrutsDateConverter




package org.struts2.action;

import java.util.Date;

public class LoginAction {

		private String loginName;
		private Date loginTime;
		public Date getLoginTime() {
			return loginTime;
		}

		public void setLoginTime(Date loginTime) {
			this.loginTime = loginTime;
		}

		public String getLoginName() {
			return loginName;
		}

		public void setLoginName(String loginName) {
			this.loginName = loginName;
		}
		
		public String execute()
		{
			
			return "success";
		}
		
		public String login()
		{
			
			return "success";
        }
}




package org.struts2.type.converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;
public class StrutsDateConverter extends StrutsTypeConverter {
	SimpleDateFormat simpleDataFormat=new SimpleDateFormat("yyyy.MM.dd");
	@Override
	/**
	 * 从字符串类型转换为对象类型.
	 * value:为从页面提交的值.是数组是因为可能1个name对应着多个value,如:多选框.
	 * toType:为即将要转换成的类型.
	 */
	public Object convertFromString(Map arg0, String[] value, Class toType) {
		
		Date returnDate=null;
		//得到传过来 的字符串.
		String date=value[0];
		try {
			//SimpleDateFormat对象的parse()将字符串转换为对象数据类型.
			returnDate = simpleDataFormat.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return returnDate;
	
	}
	
	/**
	 * 从对象类型转换为字符串类型.
	 * 即前台得到数据时的ognl表达式时需要转换.否则得不到值.
	 * jstl表达式以及el表达式可以不需要转换也可以得到.
	 * 
	 * value:后台的对象数据类型.
	 * 		  
	 */
	@Override
	public String convertToString(Map arg0, Object value) {
		//先将后台的值转换为Date类型
		Date date=(Date)value;
		//然后用SimpleDateFormat对象将date格式化为字符串返回.
		return simpleDataFormat.format(date);
	}

}


package org.struts2.type.converter;

import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Map;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
public class DateTypeConverter extends DefaultTypeConverter {
	@Override
	public Object convertValue(Map<String, Object> context, Object value,Class toType) {

		SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy.MM.dd");
		try
		{
			//将字符串转换为对象
			if(toType==Date.class)
			{
				String[] params=(String[])value;
				return dateFormat.parse(params[0]);
			}
			//将对象转换为字符串
			else if(toType==String.class)
			{
				Date date=(Date)value;
				return dateFormat.format(date);
			}
		}
		catch(Exception e)
		{
			
		}
		return null;
	}

}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值