【问题标题】:Is it possible to configure unified format of date format for whole struts webapp?是否可以为整个struts webapp配置统一的日期格式?
【发布时间】:2014-04-15 07:59:46
【问题描述】:

无论如何我都会收到异常Could not parse date。

日期格式有统一的公司标准-'dd/MM/yyyy'

有些计算机具有不同的系统区域设置。我正在为datepicker 使用 jQueryUI(它是小部件的标准,并且已经确定了 css 样式以匹配应用程序主题)。

一开始,我没有找到更好的解决方案,然后使用SimpleDateFormat 对象手动将日期字符串转换为日期对象。现在我有了转换器类,但仍然需要配置每个具有 java.util.Date 属性的操作。

我正在使用 XML 配置,我确实尝试添加到 struts.xml:

<constant name="struts.date.format" value="dd/MM/yyyy" />

没用。

有什么东西可以强制所有 web 应用程序使用没有语言环境的单一日期格式,只是输出和输入日期的统一格式?

或者我如何提取 Struts 日期类型转换器期望的日期格式,以便我可以使用 JS 转换日期之前发送到服务器以匹配 Struts 期望?

【问题讨论】:

  • jQuery 使用与 Struts2 不同的日期时间模式。
  • 在 jqueryui 中可以指定日期模式。重点是同步产生 jqueryui datetimepicker 的内容和预期消耗 struts 参数拦截器的 DateConverter 的内容。
  • 如果您发现这个问题是因为您面临 Struts 使用基于浏览器的 Accept-Language 标头的不一致日期解析的问题,请参阅 stackoverflow.com/a/68218656/687315 以获取自定义拦截器以对语言环境进行硬编码。

标签: java struts2 internationalization locale actioncontext


【解决方案1】:

Struts2 被设计为根据客户端请求的区域设置不同的行为。

i18n interceptor 是默认拦截器堆栈的成员。因此,它负责将请求的语言环境设置为操作上下文,覆盖默认设置。如果请求参数未请求区域设置,它还将该区域设置存储到会话以进一步检索它。

动作上下文的语言环境由默认类型转换器使用,因此为动作上下文设置语言环境可能会覆盖可以通过struts.locale 和i18n 拦截器配置的默认语言环境设置,不会改变这一点。

如果是这样,则无需其他操作,只需根据该区域设置将您的日期格式设置为全局资源属性。您还可以使用可与i18n 请求的语言环境一起使用的操作属性,由于order of processing localization resources 而具有不同的格式。

如果您不需要用户切换语言环境的可能性,您应该从堆栈中删除i18n 拦截器。

如何使用操作上下文的语言环境格式化日期和数字:Formatting Dates and Numbers。

【讨论】:

  • 我确实尝试将日期格式添加到无法解决的全局资源中。根据日志记录,日期属性由 com.opensymphony.xwork2.conversion.impl.DateConverter 类处理,该类尝试使用不同的格式化程序解析日期,但它们都不是基于来自全球资源的数据格式构建的。
  • 您不仅需要添加它,还需要使用它。第一件事是这个转换器正在做的是从上下文中获取一个语言环境,然后基于该语言环境创建一个格式化程序/解析器,然后完成这项工作。您只需将日期格式化为正确的语言环境。
  • 我已经这样做了。我没有找到配置日期格式的方法。所以我只是调试 DateConverter 以找到 DateConverter 可接受的日期格式版本并在发送到服务器之前由 js 转换
  • 不,你没有。我已经放置了一个链接,您应该按照该链接来格式化页面上的示例日期和数字。
  • 我花了很多时间与 doc 一起尝试使用正确的语言环境。没用。来自 struts doc 的示例代码通常仅在示例中有效。
猜你喜欢
  • 2019-04-30
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 2011-03-05
  • 2020-02-14
相关资源
最近更新 更多