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

来源:互联网 发布:linux oracle dba登录 编辑:程序博客网 时间:2024/06/10 13:07

1.要建一个类型转换类:分两种方式.下文中都有,任选其一即可.1.)让该类直接继承DefaultTypeConverter2.)让该类直接继承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.DateTypeConverterloginTime=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:后台的对象数据类型. *    */@Overridepublic 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 {@Overridepublic 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;}}





原创粉丝点击