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

标签 java date struts2 localization internationalization

我正在开发一个多语言 Struts2 应用程序,我有很多处理 Calendar 属性的操作。默认类型转换大部分时间都有效,但是在某些语言环境中我想更改使用的默认格式。

具体来说,我希望英语语言环境中的日期遵循 yyyy-MM-dd 格式。然而,这不起作用(奇怪的是 yyyy-MM-dd HH:mm 工作正常,但在这种情况下我不想有时间部分),因为 Struts2 期望英语语言环境中的日期看起来不同。

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

  • A) 自己的StrutsTypeConverter。这应该可行,但我无法将 package.properties 文件中指定的格式注入(inject)其中。
  • 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());
    }

}

我删除了代码的非必要部分,但这是一个可行的解决方案。

关于java - 如何更改 Struts2 中的默认日期格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32888421/

相关文章:

jquery - 由于名称而无法验证输入

java - 转换为阿拉伯数字时出现 ArrayIndexOutOfBoundsException 中断

java - 解析Excel文件中存储的日期字符串

java - 无法为 org.gradle.api.internal.artifacts.dsl.dependency.DefaultDependencyHandler 类型的对象设置未知属性 'nav_version'

java - SQLite:从日期获取周数

excel - 如何在 Excel 中将不同的日期格式转换或更改为一种格式

validation - Struts 2 在操作中手动调用自定义验证

java - 如何在不使用复选框或单选按钮的情况下将表格中选择的数据发送到 Struts2 中?

java - 如何在 gradle 中的类路径之外指定 quartz 属性文件?

java - 生成签名的apk时为"Error: Cannot fit requested classes in a single dex file (# methods: 66653 > 65536)"