Проблема с форматом отображения средства выбора даты и времени Struts2

Проблема, с которой я столкнулся с тегом выбора даты и времени struts2.0.14

Проблема заключается в том, что для атрибута displayformat struts2 datetimepicker всегда должен быть установлен формат формата даты и времени сервера tomcat, иначе отправленные значения равны нулю.

Изменить настройку даты и времени в Win 7:

  1. Щелкните правой кнопкой мыши дату в правом нижнем углу.
  2. Нажмите «Изменить настройки даты и времени».
  3. Изменить настройки календаря
  4. Изменить региональные настройки
  5. Установить формат как английский (Индия)

Этапы воспроизведения

  1. Измените региональные настройки, как указано выше, и перезапустите сервер tomcat.
  2. Теперь не используйте какой-либо формат отображения или используйте формат отображения, отличный от «дд / мм / гггг» в средстве выбора даты и времени.
  3. Отправьте форму struts2 с датой 21/12/2012.
  4. Дата отправки в действии установлена ​​на нуль
  5. Теперь измените региональные настройки на английский (США), не используйте формат отображения и перезапустите сервер.
  6. Значения в действии устанавливаются как представленные через форму.

Ожидаемый результат

  1. Каким бы ни был системный формат даты и времени, дата должна быть соответствующим образом проанализирована и доступна в действии.

Энви:

Java 6, Struts2.0.14, Firefix 12, кот 6.

Любые обходные пути или исправления через свойства или что-то в этом роде?

*Примечание. Не отвечайте, если ответ заключается в использовании jquery или какой-либо другой библиотеки js или обновлении.


person Amol Ghotankar    schedule 06.06.2012    source источник
comment
Я не понимаю. Может быть, это моя проблема с английским языком. Вы пытаетесь получить региональный формат даты и времени?   -  person batbaatar    schedule 07.06.2012
comment
Обновил пост, надеюсь, теперь вы сможете его перепостить :)   -  person Amol Ghotankar    schedule 07.06.2012
comment
* Примечание. Не отвечайте, если ответ заключается в использовании jquery или какой-либо другой библиотеки js или обновлении. Хорошая оговорка прямо там. Спасибо, что ограничиваете нашу свободу.   -  person tom    schedule 07.06.2012


Ответы (1)


Вам нужно использовать свой собственный конвертер DateTime.

В вашем файле xwork-conversion.properties (создайте, если у вас его нет) поместите эту строку:

java.util.Date = org.yourproject.common.StringToDateTimeConverter

И в вашем StringToDateTimeConverter есть что-то вроде этого кода

import java.util.*
import java.text.DateFormat.*;

    public class StringToDateTimeConverter extends StrutsTypeConverter{

        public Object convertFromString(Map context, String[] strings, Class toClass) {     

            DateFormat DATETIME_FORMAT = getDateInstance(SHORT, Locale.getDefault());

            if (strings == null || strings.length == 0 || strings[0].trim().length() == 0) {
                return null;
            }

            try
            {
                DATETIME_FORMAT.setLenient(false);
                return DATETIME_FORMAT.parseObject(strings[0]);

            } catch (ParseException e) {
                //throw new TypeConversionException(); <-- if you want to catch conversion error
                return null;
            }
        }

        public String convertToString(Map context, Object date) {
            DateFormat DATETIME_FORMAT = getDateInstance(SHORT, Locale.getDefault());
            if (date != null && date instanceof Date) {
                return DATETIME_FORMAT.format(date);
            } else {
                return null;
            }
        }
    }

Использованная литература:

Формат даты Java для локали

http://www.roseindia.net/java/java-get-example/java-get-default-locale.shtml

person batbaatar    schedule 07.06.2012
comment
Из JavaDoc, Дата форматы не синхронизированы. ... Если несколько потоков одновременно обращаются к формату, он должен быть синхронизирован извне. Этот код представляет собой несчастный случай, ожидающий своего часа. - person Boris the Spider; 24.09.2015