Java BeanUtilsBean: конвертировать дату в строку - PullRequest
6 голосов
/ 22 апреля 2011

Я пытаюсь запустить BeanUtilsBean.getInstance().populate(...), но в форме HTML есть поле, содержащее строковое представление даты рождения.Объектный бин имеет тип поля java.util.Date

. Прочитайте результаты поиска в Ggl, которые должны создавать собственные конвертеры, но не совсем понимают, как это сделать.

Кто-нибудь может помочь?

Мой код:

public static void main(String[] args) {
    Map<String, String[]> formData = new HashMap<String, String[]>();
    formData.put("email", new String[]{"danny@gmail.com"});
    formData.put("firstName", new String[]{"danny"});
    formData.put("lastName", new String[]{"miller"});
    formData.put("dob", new String[]{"15-Apr-1980"});
    formData.put("userName", new String[]{"dannymiller"});
    try {
        Consumer consumer = new Consumer();
        DateTimeConverter dtConverter = new DateConverter();
        dtConverter.setPattern("dd/MMM/yyyy");

        ConvertUtilsBean convertUtilsBean = new ConvertUtilsBean();
        convertUtilsBean.deregister(Date.class);
        convertUtilsBean.register(dtConverter, Date.class);

        BeanUtilsBean beanUtilsBean = new BeanUtilsBean(convertUtilsBean, new PropertyUtilsBean());

        beanUtilsBean.populate(consumer, formData);


        if (consumer != null) {
            System.out.println(consumer.getEmail());
            System.out.println(consumer.getFirstName());
            System.out.println(consumer.getLastName());
            System.out.println(consumer.getDob());
            System.out.println(consumer.getUserName());
        }
    } catch  (Exception e) {
        e.printStackTrace();
    }

Ошибка возврата:

22 апреля 2011 г. 11:14:45 org.apache.commons.beanutils.converters.DateTimeConverter toDateВНИМАНИЕ: DateConverter не поддерживает стандартное преобразование строки в дату.22 апреля 2011 г. 11:14:45 org.apache.commons.beanutils.converters.DateTimeConverter toDate ПРЕДУПРЕЖДЕНИЕ: (NB переконфигурируйте конвертер или используйте альтернативную реализацию) Исключение в потоке "main" org.apache.commons.beanutils.ConversionException: DateConverter не поддерживает стандартное преобразование строки в дату.в org.apache.commons.beanutils.converters.DateTimeConverter.toDate (DateTimeConverter.java:468) в org.apache.commons.beanutils.converters.DateTimeConverter.convertToType (DateTimeConverter.java:343) в org.apache.commons..converters.AbstractConverter.convert (AbstractConverter.java:156) в org.apache.commons.beanutils.converters.ConverterFacade.convert (ConverterFacade.java:60) в org.apache.commons.beanutils.ConvertUtilsBean.convert (ConvertUjsava): 470) по адресу org.apache.commons.beanutils.BeanUtilsBean.setProperty (BeanUtilsBean.java:1008) по адресу org.apache.commons.beanutils.BeanUtilsBean.populate (BeanUtilsBean.java:830) на com.yeTech.main (BeanTest.java:32)

Ответы [ 2 ]

11 голосов
/ 22 апреля 2011

Вам нужно SimpleDateFormat, чтобы проанализировать данную строку в соответствии с указанным форматом.Для этого вам нужно будет обработать преобразование вручную - назвать параметр запроса по-другому, а затем установить его вручную.

Но beanutils имеет утилиту преобразования, так что вы можете использовать ее вместо этого (этот код можно выполнить один раз заприложение):

DateTimeConverter dtConverter = new DateConverter();
dtConverter.setPattern("<your custom date pattern here>");
ConvertUtils.register(dtConverter, Date.class);
4 голосов
/ 24 апреля 2011

Выполнено с использованием этого метода:

public Object populate(Object obj, HashMap<String, String[]> formData)
            throws IllegalAccessException, InvocationTargetException {
        ConvertUtils
                .register(new StringToDateConverter(), java.util.Date.class);
        BeanUtilsBean.getInstance().populate(obj, formData);
        return obj;
    }
...