一尘不染

Struts2日期时间选择器displayformat问题

tomcat

我在struts2.0.14的日期时间选择器标签中遇到的问题

问题在于,必须始终将struts2 datetimepicker
displayformat属性设置为tomcat服务器日期时间格式,否则提交的值为null。

在Win 7中更改日期时间设置:

  1. 右键单击右下角的日期。
  2. 单击更改日期和时间设置
  3. 更改日历设置
  4. 更改区域设置
  5. 将格式设置为英语(印度)

复制步骤

  1. 如上所述更改区域设置并重新启动tomcat服务器。
  2. 现在,不要在日期时间选择器中使用任何显示格式或使用“ dd / mm / yyyy”以外的其他显示格式
  3. 提交日期为21/12/2012的struts2表单
  4. 在行动中,提交日期设置为null
  5. 现在,将区域设置更改为English(US),不要使用任何显示格式,然后重新启动服务器。
  6. 有效值设置为通过表单提交。

预期结果

  1. 无论系统日期时间格式是什么,都必须相应地解析日期并使之可用。

恩维:

Java 6,Struts2.0.14,Firefix 12,tomcat 6。

是否有任何变通办法或通过属性或其他解决方法?

  • 注意:如果答案是使用jquery或其他js lib或升级,请不要回答。

阅读 369

收藏
2020-06-16

共1个答案

一尘不染

您需要使用自定义的DateTime转换器。

在您的文件xwork-conversion.properties(如果没有一个文件,则创建)中输入以下行:

java.util.Date = org.yourproject.common.StringToDateTimeConverter

在您的中StringToDateTimeConverter,有类似以下的代码

import java.util.*
import java.text.DateFormat.*;

    public class StringToDateTimeConverter extends StrutsTypeConverter{

        public Object convertFromString(Map context, String[] strings, Class toClass) {

            DateFormat DATETIME_FORMAT = getDateInstance(SHORT, Locale.getDefault());

            if (strings == null || strings.length == 0 || strings[0].trim().length() == 0) {
                return null;
            }

            try
            {
                DATETIME_FORMAT.setLenient(false);
                return DATETIME_FORMAT.parseObject(strings[0]);

            } catch (ParseException e) {
                //throw new TypeConversionException(); <-- if you want to catch conversion error
                return null;
            }
        }

        public String convertToString(Map context, Object date) {
            DateFormat DATETIME_FORMAT = getDateInstance(SHORT, Locale.getDefault());
            if (date != null && date instanceof Date) {
                return DATETIME_FORMAT.format(date);
            } else {
                return null;
            }
        }
    }

参考文献:

语言环境的Java日期格式

http://www.roseindia.net/java/java-get-example/java-get-default-
locale.shtml

2020-06-16