package cn.customer.web.controller;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.customer.domain.Customer;
import cn.customer.service.impl.BusinessService;
import cn.customer.utils.WebUtils;public class AddCustomerServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

try {
Customer customer = WebUtils.request2Bean(request, Customer.class); //调用webutils工具给bean赋值
customer.setId(WebUtils.makeId());
BusinessService service = new BusinessService();
service.addCustomer(customer);

request.setAttribute("message", "客户添加成功!");
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("message", "客户添加失败!");
}
request.getRequestDispatcher("/message.jsp").forward(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

解决方案 »

  1.   

    这是beanpackage cn.customer.domain;import java.util.Date;public class Customer {
    private String id;
    private String name;
    private String gender;
    private Date birthday;
    private String cellphone;
    private String email;
    private String hobby;
    private String type;
    private String description;


    public String getId() {
    return id;
    }
    public void setId(String id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getGender() {
    return gender;
    }
    public void setGender(String gender) {
    this.gender = gender;
    }
    public Date getBirthday() {
    return birthday;
    }
    public void setBirthday(Date birthday) {
    this.birthday = birthday;
    }
    public String getCellphone() {
    return cellphone;
    }
    public void setCellphone(String cellphone) {
    this.cellphone = cellphone;
    }
    public String getEmail() {
    return email;
    }
    public void setEmail(String email) {
    this.email = email;
    }
    public String getHobby() {
    return hobby;
    }
    public void setHobby(String hobby) {
    this.hobby = hobby;
    }
    public String getType() {
    return type;
    }
    public void setType(String type) {
    this.type = type;
    }
    public String getDescription() {
    return description;
    }
    public void setDescription(String description) {
    this.description = description;
    }


    }/*id varchar(40) primary key,
    name varchar(40) not null,
    gender varchar(4) not null,
    birthday date,
    cellphone varchar(20) not null,
    email varchar(40),
    hobby varchar(200),
    type varchar(100),
    description varchar(255)*/
      

  2.   

    这是request里面的数据:birthday : 1921-07-17
    email : [email protected]
    description : ddd
    cellphone : 123456789
    name : 二狗
    hobby : 足球,篮球
    hob : 足球
    gender : 男
    type : 重要客户
      

  3.   

    我去一个用户只让回复3遍
    换个号接着来,这是错误提示:错误提示:
    [code=java]
    2013-11-9 15:41:29 org.apache.commons.beanutils.PropertyUtilsBean invokeMethod
    严重: Method invocation failed.
    java.lang.IllegalArgumentException: argument type mismatch
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:1773)
    at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1759)
    at org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1648)
    at org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:1677)
    at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1022)
    at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:313)
    at cn.customer.utils.WebUtils.request2Bean(WebUtils.java:26)
    at cn.customer.web.controller.AddCustomerServlet.doGet(AddCustomerServlet.java:31)
    at cn.customer.web.controller.AddCustomerServlet.doPost(AddCustomerServlet.java:47)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)[/code]
      

  4.   

    实体类Customer里的birthday是Date类型的,你设置值时转成了String类型,
    String value = request.getParameter(name); 
    而   BeanUtils.setProperty这个方法不能自动进行类型转换 ,所以就报类型不匹配错误了。
    遍历request里值时可以加个判断,如果是birthday先转为Date类型,再setProperty应该就可以了       
      

  5.   

    可是我这里已经设置时间转换器了啊:ConvertUtils.register(new DateLocaleConverter(), Date.class); 
      

  6.   

    为防止乱码影响,我在AddCustomerServlet中加入了request.setCharacterEncoding("UTF-8");可是问题还是没有解决
      

  7.   

    你把java.sql.Date换成java.util.Date试试
      

  8.   

    还是挂啊,兄弟 警告: Null pattern was provided, defaulting to: yy-M-d ah:mm
    java.lang.RuntimeException: org.apache.commons.beanutils.ConversionException
    at cn.customer.utils.WebUtils.request2Bean(WebUtils.java:39)
    at cn.customer.web.controller.AddCustomerServlet.doGet(AddCustomerServlet.java:20)
    at cn.customer.web.controller.AddCustomerServlet.doPost(AddCustomerServlet.java:36)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)
    Caused by: org.apache.commons.beanutils.ConversionException
    at org.apache.commons.beanutils.locale.BaseLocaleConverter.convert(BaseLocaleConverter.java:231)
    at org.apache.commons.beanutils.locale.BaseLocaleConverter.convert(BaseLocaleConverter.java:195)
    at org.apache.commons.beanutils.ConvertUtilsBean.convert(ConvertUtilsBean.java:428)
    at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1002)
    at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:313)
    at cn.customer.utils.WebUtils.request2Bean(WebUtils.java:33)
    ... 16 more
    Caused by: java.lang.NullPointerException
    at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:675)
    at java.text.SimpleDateFormat.applyPattern(SimpleDateFormat.java:2042)
    at org.apache.commons.beanutils.locale.converters.DateLocaleConverter.parse(DateLocaleConverter.java:256)
    at org.apache.commons.beanutils.locale.BaseLocaleConverter.convert(BaseLocaleConverter.java:225)
    ... 21 more
    空模式提供,违约:yy-m-d
      

  9.   

    太诡异了,我自己试了下,是可以转成Date的package com.jsj.cms.modules.index.bo;import java.lang.reflect.InvocationTargetException;
    import java.util.Date;
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.commons.beanutils.ConvertUtils;
    import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;public class Test {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException {
    try {
    Class clz = Class.forName("com.jsj.cms.modules.index.bo.Customer");
    Customer customer = (Customer)clz.newInstance();
    ConvertUtils.register(new DateLocaleConverter(), Date.class);
    BeanUtils.setProperty(customer, "name", "test");
    BeanUtils.setProperty(customer, "birthday", "1921-07-17");
    System.out.println(customer.getName());
    System.out.println(customer.getBirthday());
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    } catch (InvocationTargetException e) {
    e.printStackTrace();
    }

    }
    }
      

  10.   

    可能是beanutils包版本的原因,升级成commons-beanutils-1.8.0试试看,我用的这个版本的可以的。
      

  11.   

    应该是版本的问题,换成新的版本试试
    Apache Commons BeanUtils 1.9.1下载地址:
    http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi