我正在开发一个多语言 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/