1

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

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

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

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

复制步骤

  1. 如上所述更改区域设置并重新启动 tomcat 服务器。
  2. 现在不要在日期时间选择器中使用任何显示格式或使用除“dd/mm/yyyy”以外的显示格式
  3. 提交日期为 21/12/2012 的 struts2 表单
  4. In Action 提交日期设置为空
  5. 现在将区域设置更改为英语(美国),不要使用任何显示格式并重新启动服务器。
  6. 实际值设置为通过表单提交。

预期结果

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

环境:

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

通过属性或其他什么解决方法或修复?

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

4

1 回答 1

2

您需要使用自定义的 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

于 2012-06-07T08:08:30.887 回答