Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更改Struts2中的默认日期格式?_Java_Date_Struts2_Localization_Internationalization - Fatal编程技术网

Java 如何更改Struts2中的默认日期格式?

Java 如何更改Struts2中的默认日期格式?,java,date,struts2,localization,internationalization,Java,Date,Struts2,Localization,Internationalization,我正在开发一个多语言Struts2应用程序,我有很多操作都是处理日历属性的。默认类型转换在大多数情况下都有效,但是在某些地区,我希望更改使用的默认格式 具体来说,我希望英语区域设置中的日期遵循yyyy-MM-dd格式。但是,这不起作用(奇怪的是,yyyy-MM-dd HH:MM工作得很好,但在这种情况下,我不希望有时间段),因为Struts2期望英语区域设置中的日期看起来不同 因此,我想更改转换的预期格式。我正在寻找一个明智的解决办法。我已经尝试过的选项包括: A) OwnStrutsType

我正在开发一个多语言Struts2应用程序,我有很多操作都是处理
日历
属性的。默认类型转换在大多数情况下都有效,但是在某些地区,我希望更改使用的默认格式

具体来说,我希望英语区域设置中的日期遵循
yyyy-MM-dd
格式。但是,这不起作用(奇怪的是,
yyyy-MM-dd HH:MM
工作得很好,但在这种情况下,我不希望有时间段),因为Struts2期望英语区域设置中的日期看起来不同

因此,我想更改转换的预期格式。我正在寻找一个明智的解决办法。我已经尝试过的选项包括:

  • A) Own
    StrutsTypeConverter
    。这应该可以工作,但我无法将
    package.properties
    文件中指定的格式注入其中
  • B) 更改getter/setter对,改为使用
    String
    ,虽然有效,但这不是一个明智的解决方案

如何修复解决方案A?还是有其他方法?当然,如果这可以完全在配置中完成,那将是最好的。

好的,我找到了解决我手头问题的方法,不过,我认为这可以以更理智的方式完成。无论如何,我发布了我自己的类型转换器:

public class DateConverter extends StrutsTypeConverter {

    private DateFormat dateFormat;

    {
        ActionContext ctx = ActionContext.getContext();
        ActionSupport action = (ActionSupport) ctx.getActionInvocation().getAction();
        String formatString = action.getText("dateformat.ui");
        dateFormat = new SimpleDateFormat(formatString);
    }

    public Object convertFromString(Map context, String[] values, Class toClass) {
        String input = values[0];
        try {
            Date date = dateFormat.parse(input);
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            return cal;
        } catch (ParseException e) {
            return null;
        }
    }

    public String convertToString(Map context, Object object) {
        Calendar cal = (Calendar) object;
        return dateFormat.format(cal.getTime());
    }

}

我删除了代码中不重要的部分,但这是一个有效的解决方案。

好问题。请注意,您应该始终使用
yyyy-MM-dd
,因为它是。然后,在兼容HTML5的浏览器(如Chrome)上使用
时,它将根据正确的区域设置显示日期(如意大利的
dd/MM/yyyyy
,或美国的
MM/dd/yyyyyy
),但将始终将
yyyyy-MM-dd
发送到服务器。问题会在不支持HTML5日期的浏览器(如Firefox)上出现,在浏览器中,您将退回到Javascript日历,该日历将发送它将显示的内容,并最终向用户呈现丑陋的
yyyy-MM-dd
。顺便说一句,目前我们只使用两个地区。在匈牙利语中,我们使用
yyyy.MM.dd.
,这在默认情况下与Struts2一起工作。但在英语地区,我们的客户习惯于yyyy-MM-dd,而事实并非如此。(
yyyy/MM/dd
是Struts2中的默认值)。自定义日期转换器是一个不错的选择。我已经打开了一个,希望如此,请继续关注。@AndreaLigios干得不错!