类型转换

类型转换

将某些类型的数据转换成固定的形式

比如说:

new SimpleDateFormat("yyyy 年MM 月dd 日"),
new SimpleDateFormat("yyyy-MM-dd"),
new SimpleDateFormat("MM/dd/yy"),
new SimpleDateFormat("yyyy.MM.dd"), 
new SimpleDateFormat("yyMMdd"),
new SimpleDateFormat("yyyy/MM/dd") };

首先创建一个jsp页面去接受收入数据的类型:

复制代码
<%@ taglib prefix="s" uri="/struts-tags" %>
  <body>
   <s:form action="dateConvert.action">
                <div class="infos">
                    <table class="field">
                        <tr>
                            <td class="field">请输入日期:</td>
                            <td><input type="text" class="text" name="timeDate" /></td>
                        </tr>
                        <s:fielderror />
                    </table>
                    <div class="buttons">
                    <s:submit value="转换格式"/>
                    </div>
                </div>
            </s:form>
  </body>
复制代码

2.上边的页面会将数据交给dateConvert处理,dateConvert类由于要处理数据转换方面的问题,所以继承了StrutsTypeConverter

具体代码如下:

 

复制代码
package cn.jbit.util;

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

import org.apache.struts2.util.StrutsTypeConverter;

import com.opensymphony.xwork2.conversion.TypeConversionException;


public class DateConverter extends StrutsTypeConverter {
    // 支持转换的多种日期格式,可增加时间格式  控制台可以接受的类型转换格式
    private final DateFormat[] dfs = { 
            new SimpleDateFormat("yyyy 年MM 月dd 日"),
            new SimpleDateFormat("yyyy-MM-dd"),
            new SimpleDateFormat("MM/dd/yy"),
            new SimpleDateFormat("yyyy.MM.dd"), 
            new SimpleDateFormat("yyMMdd"),
            new SimpleDateFormat("yyyy/MM/dd") };

    /**
     * 将指定格式字符串转换为日期类型。
     */
    public Object convertFromString(Map context, String[] values, Class toType) {
        String dateStr = values[0];// 获取日期的字符串
        for (int i = 0; i < dfs.length; i++) {// 遍历日期支持格式,进行转换
            try { //2012/12/12
                return dfs[i].parse(dateStr);  //进行格式的比较
            } catch (Exception e) {
                continue;
            }
        }
        throw new TypeConversionException("转换错误");
    }

    public String convertToString(Map context, Object object) {
        Date date = (Date) object;
        // 输出的格式是yyyy-MM-dd
        return new SimpleDateFormat("yyyy-MM-dd").format(date);
    }
}
复制代码

上述类可以说是用来做类型转换的一个自定义的手工的工具类,现在做的需要真正的转换字符串

创建出一个数据转换的action类,如下:

复制代码
package cn.jbit.action;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class DateConvertAction extends ActionSupport {
    //定制成员变量TIMEDATE  时间
    private Date timeDate;
    public String execute(){
        return SUCCESS;
    }
    public Date getTimeDate() {
        return timeDate;
    }

    public void setTimeDate(Date timeDate) {
        this.timeDate = timeDate;
    }
}
复制代码

我们可以通过两种方式吧工具类和真正的action类做一个关联:

1.可以创建一个全局类型的转换器

转换类全名=类型转换器类的全名(文件名为xword.conversion.properties)的属性文件,里边配置为:

java.util.Date=cn.jbit.util.DateConverter 

这是适合于多个action的全局的

2.可以创建一个相对于单个action的属性文件:ClassName.conversion.properties

其内容为特定类的属性名=类型转换器的全名

 

完成之后可以做一些处理类型转换错误的操作:

1.前提条件:>启动strusConversionErrorInterceptor拦截器,该拦截器包含在defaultStack拦截器栈中,参看struts-defatul.xml文件,如果在struts.xml中扩展了"struts-default"包,启动项目时会自动加载

>实现validationAware接口,ActionSupport实现了该接口

>配置input结果映射,出现错误之后,停留到该页面

>再页面使用<s:fielderror>标签来输出转换的错误.

2.修改所有类型的转换错误信息

<constant name ="struts.custom.i18n.resources" value="message">

创建资源文件message.properties ,并添加文本:

xwork.default.invalid.fieldvalue=field"{0}"'s value is invalid

3.定制特定字段的类型转换错误信息在action 同级目录下 DateConvertAction.properties

invalid.fieldvalue.timeDate

日期格式错误

posted @ 2016-10-14 09:50  怜城  阅读(100)  评论(0编辑  收藏  举报