吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2676|回复: 3
收起左侧

[Java 转载] Struts日期类型转换问题

[复制链接]
youling 发表于 2016-10-30 22:59
        昨天遇到一个很奇怪的问题,一个同事用谷歌浏览器测试时在提交订单时报错:no result defined for action for  result input.但是我用我的谷歌浏览器又没有问题,然后又让其他同事试试,结果有个同事的猎豹浏览器也报错。这是个很奇怪的问题,百度了一下,找了一堆结果都没有解决我的问题,然后无意间看到一个Struts2日期转换的问题的帖子,这个贴子说是由于页面的日期String类型转换成java类中的Date类型时,由于没有找到 "YYYY-MM-dd"这种格式的日期,所有转换成日期对象失败,但是为什么会没有  "YYYY-MM-dd"这种格式的日期呢。  Struts2 在转换日期的时候会使用浏览器设置的日期格式去找,而且在浏览器的语言是英语的时候,日期格式是没有"YYYY-MM-dd"这种格式的。我又去看了出问题的浏览器的语言的设置,果然是英语,改成中文就好了。       但是我们不能强制要求客户去改浏览器的语言设置,因而我们可以对Date类型自定义转换方式,以下是http://www.javaeye.com/wiki/struts2/1365-passing-parameters-in-struts2 中的一个类型转换器定义(不适合国际化的环境),如需要,你可以定义自己的转换器:

public class DateConverter extends DefaultTypeConverter {

        private static final Logger logger = Logger.getLogger(DateConverter.class);

        private static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

        private static final String DATE_PATTERN = "yyyy-MM-dd";
        
        private static final String MONTH_PATTERN = "yyyy-MM";

        /**
         * Convert value between types
         */

        @SuppressWarnings("unchecked")
        public Object convertValue(Map ognlContext, Object value, Class toType) {
                Object result = null;
                if (toType == Date.class) {
                        result = doConvertToDate(value);
                } else if (toType == String.class) {
                        result = doConvertToString(value);
                }
                return result;
        }

        /**
         * Convert String to Date
         *
         * @param value
         * @return
         */

        private Date doConvertToDate(Object value) {
                Date result = null;

                if (value instanceof String) {
                        result = DateUtils.parseDate((String) value, new String[] { DATE_PATTERN, DATETIME_PATTERN, MONTH_PATTERN });

                        // all patterns failed, try a milliseconds constructor
                        if (result == null && StringUtils.isNotEmpty((String)value)) {

                                try {
                                        result = new Date(new Long((String) value).longValue());
                                } catch (Exception e) {
                                        logger.error("Converting from milliseconds to Date fails!");
                                        e.printStackTrace();
                                }

                        }

                } else if (value instanceof Object[]) {
                        // let's try to convert the first element only
                        Object[] array = (Object[]) value;

                        if ((array != null) && (array.length >= 1)) {
                                value = array[0];
                                result = doConvertToDate(value);
                        }

                } else if (Date.class.isAssignableFrom(value.getClass())) {
                        result = (Date) value;
                }
                return result;
        }

        /**
         * Convert Date to String
         *
         * @param value
         * @return
         */

        private String doConvertToString(Object value) {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATETIME_PATTERN);
                String result = null;
                if (value instanceof Date) {
                        result = simpleDateFormat.format(value);
                }
                return result;
        }
}



可以将该转换器注册为全局的:在classpath下建立xwork-conversion.properties文件,内容为:java.util.Date=你的类型转换器的完整限定类名

免费评分

参与人数 1热心值 +1 收起 理由
懐惗 + 1 虽然看不懂,感谢分享

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

懐惗 发表于 2016-10-30 23:15
虽然看不懂,感谢分享
czq牛牛 发表于 2017-3-21 14:48
 楼主| youling 发表于 2017-3-25 23:50
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-14 20:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表