Struts2 дата разбора - PullRequest
       3

Struts2 дата разбора

0 голосов
/ 08 мая 2011

У меня есть форма с полем, в котором используется средство выбора даты / времени, которое создает скрытое поле с полной датой и временем в британском формате дд / мм / гг ЧЧ: мм через использование JavaScript. Это передается в действие struts2, в котором есть методы получения и установки для поля с операцией над java.util.Date.

В JSP:

<s:form>

  ...
  <input type="hidden" name="myDate" value="08/05/11 16:00" />
  <s:submit />

</s:form>

В действии

public class MyAction 
{

   public void setMyDate(Date d)
   {
      this.d = d;
   } 

   public Date getMyDate()
   {
      return d;
   }

}

Как и ожидалось в Firefox, когда я отправляю формы, автоматически разбирает дату, и в результате получается объект Date в действии с правильной датой.

Однако в Google Chrome, когда я отправляю форму, дата анализируется, как если бы она была в американском формате ММ / дд / гг ЧЧ: мм , и в результате я получаю 5 августа вместо 8 мая .

Проверка заголовков HTTP, отправленных обоими браузерами, показывает, что, несмотря на то, что мой язык операционной системы установлен на en_GB, Google Chrome по-прежнему отправляет заголовок «Accept-Language» как en_US, что означает, что Struts должен использовать это, чтобы определить, какой формат даты использовать.

Я могу только предположить, что это ошибка в Google Chrome, однако, учитывая, что у меня нет свободы исправлять Google Chrome, есть ли способ в Struts 2, чтобы я мог указать фиксированный формат даты, который сообщает Struts формат, который должен использовать для разбора дат в параметрах формы?

Ответы [ 2 ]

0 голосов
/ 09 мая 2011

Я рекомендую использовать Joda Time API. Он полностью поддерживает ISO 8601 стандарт и имеет обширный API для локалей, часовых поясов, преобразований и т. Д. Я использую его для всех мои манипуляции с датой и временем во всех моих приложениях (включая Struts 2).

0 голосов
/ 08 мая 2011

Во избежание неправильной интерпретации дат, вызванной различными значениями Locale , я бы использовал однозначный и четко определенный метод представления дат и времени. Это то, что охватывает ISO 8601 .

К сожалению, я не думаю, что Struts2 может преобразовать в Дата , учитывая это представление "из коробки". Для преобразования даты по умолчанию Struts2 использует формат SHORT для локали, связанной с текущим запросом .

Полагаю, вы могли бы попытаться найти плагин, который уже конвертирует даты ISO 8601, или простым подходом было бы просто написать свой .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...