Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BeanUtilsBean:将日期转换为字符串_Java_Apache Commons - Fatal编程技术网

Java BeanUtilsBean:将日期转换为字符串

Java BeanUtilsBean:将日期转换为字符串,java,apache-commons,Java,Apache Commons,我正在尝试运行BeanUtilsBean.getInstance().populate(…),但在HTML表单上,有一个字段携带出生日期的字符串表示形式。对象bean的字段类型为java.util.Date 阅读Ggl的一些搜索,它们必须构建自定义转换器,但不太了解如何实现 有人能帮忙吗 我的代码: public static void main(String[] args) { Map<String, String[]> formData = new HashMap<

我正在尝试运行
BeanUtilsBean.getInstance().populate(…)
,但在HTML表单上,有一个字段携带出生日期的字符串表示形式。对象bean的字段类型为
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();
    }
publicstaticvoidmain(字符串[]args){
Map formData=new HashMap();
formData.put(“电子邮件”,新字符串[]{”danny@gmail.com"});
put(“firstName”,新字符串[]{“danny”});
put(“lastName”,新字符串[]{“miller”});
formData.put(“dob”,新字符串[]{“1980年4月15日”});
put(“用户名”,新字符串[]{“dannymiller”});
试一试{
消费者=新消费者();
DateTimeConverter dtConverter=新的日期转换器();
dtConverter.setPattern(“dd/MMM/yyyy”);
ConvertUtilsBean ConvertUtilsBean=新ConvertUtilsBean();
撤销注册(Date.class);
register(dtConverter,Date.class);
BeanUtilsBean BeanUtilsBean=新的BeanUtilsBean(convertUtilsBean,new PropertyUtilsBean());
填充(消费者、表单数据);
if(消费者!=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());
}
}捕获(例外e){
e、 printStackTrace();
}
返回错误:

2011年4月22日晚上11:14:45 org.apache.commons.beanutils.converters.DateTimeConverter toDate警告:日期转换器不可用 不支持“日期”的默认字符串 转换时间:2011年4月22日晚上11:14:45 org.apache.commons.beanutils.converters.DateTimeConverter toDate警告:(注意:重新配置 转换器或使用替代品 实现)线程中的异常 “主要” 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.beanutils.converts.AbstractConverter.convert(AbstractConverter.java:156) 在 org.apache.commons.beanutils.converts.ConverterFacade.convert(ConverterFacade.java:60) 在 org.apache.commons.beanutils.ConvertUtilsBean.convert(ConvertUtilsBean.java:470) 在 org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1008) 在 org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:830) 在 main(BeanTest.java:32)


您需要一个
simpleDataFormat
,通过它可以根据指定的格式解析给定的字符串。为此,您需要手动处理转换-以不同的方式命名请求参数,然后手动设置它

但是beanutils有一个转换实用程序,所以您可以使用它(此代码可以在每个应用程序中执行一次):

DateTimeConverter dtConverter=new DateConverter();
dtConverter.setPattern(“”);
寄存器(dtConverter,Date.class);

使用此方法完成:

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;
    }
公共对象填充(对象obj,HashMap formData)
抛出IllegalAccessException,InvocationTargetException{
ConvertUtils
.register(新的StringToDateConverter(),java.util.Date.class);
BeanUtilsBean.getInstance().populate(obj,formData);
返回obj;
}

我刚刚上传了代码,我应该将哪部分放入SimpleDataFormat?非常有趣,
DateTimeConverter dtConverter=new DateTimeConverter()
无法实例化。抱歉,请参阅更新。这是具体的
日期转换器
,抱歉,我已经像上面那样更新了代码,但仍然是相同的错误。我有一个问题,如果日期的值为空,请发送异常。如何解决?谢谢。
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;
    }