Struts2 pojo类中包含Date类型属性使用自定类型转换器

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值