struts局部、全局类型转换器

第01步:编写bean

package com.self.bean;

import java.util.Date;

public class User {
    private Date birthday = null;

    public Date getBirthday() {
        System.out.println("获得-User:" + birthday);
        return birthday;
    }

    public void setBirthday(Date birthday) {
        System.out.println("设置-User:" + birthday);
        this.birthday = birthday;
    }

}

第02步:编写action类:

package com.self.action;

import com.self.bean.User;

public class Transform {

    private User lilan;

    public Transform() {
    }

    public String showdata() {
        return "tsuccess";
    }

    public User getLilan() {
        return lilan;
    }

    public void setLilan(User lilan) {
        this.lilan = lilan;
    }

}

第03步:编写转换器类

package com.self.conversion;

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

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

/**
 * 自定义转换器:DataTransform-conversion.properties
 */
/* 01--继承DefaultTypeConverter:默认转换器 */
public class DataTransform extends DefaultTypeConverter {
    /* 02-- 重写convertValue方法 */
    @Override
    public Object convertValue(Map<String, Object> context, Object value, Class toType) {
        System.out.println("执行转换");
        /*03--调用SimpleDateFormat类方法进行格式转换*/
        /*04--以action类名加“-conversion.properties”为名建立properties文件
         * :Transform-conversion.properties
         * 再加入键值对:转换类型=转换器地址
         * :birthday=com.self.action.DataTransform
         */
        SimpleDateFormat dataFormat=new SimpleDateFormat("yyyyMMdd");
        try {
            if(toType==Date.class){//目标类型为Date类型
                String[] params=(String[]) value;//接收的参数为数组类型,Request.getParameterValues();
                System.out.println("目标:Date:"+params[0]);
                return dataFormat.parse(params[0]);
            }else if(toType==String.class){//目标类型为String类型
                Date date=(Date) value;
                System.out.println("目标:String:"+date);
                return dataFormat.format(date);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

第04步:编写property文件

  property文件:放在action同级目录

  property命名:Transform-conversion.properties(action类名-conversion.properties)

lilan.birthday=com.self.conversion.DataTransform

  lilan:指的是action里面的对象

  lilan.birthday:对象.属性=转换器

第05步:配置struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.action.extension" value="do"/>
    
    <package name="transform" namespace="/" extends="struts-default">
        <action name="list_*" class="com.self.action.Transform" method="{1}">
            <result name="tsuccess">
                /outdata.jsp
            </result>
        </action>
    </package>
</struts>

第06步:编写数据输入界面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
  <body>
      <form action="list_showdata.do">
          日期:<input name="lilan.birthday" type="text" value="20150120" />
          <BR>
          输入格式01为:20150120
          <BR>
          输入格式02为:2015-01-20
          <BR>
          <input type="submit" value="提交">
      </form>
  </body>
</html>

第07步:编写数据显示界面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
  <body>
    ${lilan.birthday }
  </body>
</html>

/*****************以上是局部类型转换器,以下是全局类型转换器********************/

第01步:将property文件重命名为(xwork-conversion.properties)

第02步:将property文件移到src目录下

第03步:property配置:(这里代表的是,工程下所有Date类型,都使用这个转换器)

java.util.Date=com.self.conversion.DataTransform
原文地址:https://www.cnblogs.com/zjsy/p/4293555.html