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;
}
}