有关sturts2做的项目,放在linux出现致命的问题Date转换致死
最近在工作中做一个管理系统,在本地的时候自己测试,没有任何问题,然后放在公司服务器开始测试,
测试的一开始就出现了问题,通过date类型的条件查询数据的时候,接收请求的action直接down掉,
并且直接跳转到了input对应的界面,这种问题之致命的,因为一旦这样,所有该action的请求功能全部down
掉,简单的说,整个系统部分功能完全崩溃,一开始没找到病症,死活解决不了,后来在不懈的努力之下,
终于找到了问题所在,是因为linux环境是英文的,不能识别yyyy-MM-dd这种日期格式,说实话,struts2
这个地方做的太粗糙了,java作为跨平台的语言,这点居然给忽视了,后来自己在网上找到解决方法,
package cn.edu.bigc.common.sys; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; /** * 自定义Date转换类,为实现linux引文时间转换 * * @author jixiangxiang * */ public class DateConverter extends DefaultTypeConverter { private static final DateFormat[] ACCEPT_DATE_FORMATS = { new SimpleDateFormat("dd/MM/yyyy"), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), new SimpleDateFormat("yyyy-MM-dd"), new SimpleDateFormat("yyyy/MM/dd") }; // 支持转换的日期格式 @SuppressWarnings("unchecked") @Override public Object convertValue(Map context, Object value, Class toType) { // TODO Auto-generated method stub if (toType == Date.class) { // 浏览器向服务器提交时,进行String to Date的转换 // Date date = null; String dateString = null; String[] params = (String[]) value; dateString = params[0]; // 获取日期的字符串 for (DateFormat format : ACCEPT_DATE_FORMATS) { try { return format.parse(dateString); // 遍历日期支持格式,进行转换 } catch (Exception e) { continue; } } return null; } else if (toType == String.class) { // 服务器向浏览器输出时,进行Date to String的类型转换 Date date = (Date) value; return new SimpleDateFormat("yyyy-MM-dd").format(date); // 输出的格式是yyyy-MM-dd } return null; } }
在这里面
private static final DateFormat[] ACCEPT_DATE_FORMATS = { new SimpleDateFormat("dd/MM/yyyy"), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), new SimpleDateFormat("yyyy-MM-dd"), new SimpleDateFormat("yyyy/MM/dd") }; // 支持转换的日期格式
提供你所使用的日期格式,我的不一定适合你,关键看你使用的是什么样的格式,写好这个类以后然后遵循struts2的配置
xwork-conversion.properties放在src根目录,java.util.Date=cn.edu.bigc.common.sys.DateConverter也对应着
写上。