public void doPost(HttpServletRequest request, HttpServletResponse response)
{
Map<String,Object> map = request.getParameterMap();
String action = request.getParameter("action");
Set set = map.keySet();
User user = new User();

for (Iterator iterator = set.iterator(); iterator.hasNext();) {
Object name =  iterator.next();
Field[] fields = user.getClass().getDeclaredFields();
for(int i = 0;i < fields.length;i++){
fields[i].setAccessible(true);
if(fields[i].getName().equals(name.toString())){
System.out.println(name);
try {
fields[i].set(user,map.get(name.toString()));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}

}
}
}
if (action.equals("save")) {
save(request,response,user);
} if (action.equals("delete")) {
delete(request, response,user);
} if (action.equals("edit")) {
edit(request, response,user);
} }
java.lang.IllegalArgumentException: Can not set java.lang.String field edu.hzu.java3.common.User.name to [Ljava.lang.String;
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63)
at java.lang.reflect.Field.set(Field.java:657)
at AllServlet.doPost(AllServlet.java:101)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
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:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

解决方案 »

  1.   

    不能set 【edu.hzu.java3.common.User.name】 这个属性fields[i].set(user,map.get(name.toString()));
    好像不能set String类型的值吧
      

  2.   

    很明显是赋值问题了,将User.name对象赋值给String类型出错
      

  3.   

    请求当中“name”参数的值是一个字符串数组,而不是字符串。
      

  4.   

    Can not set java.lang.String field edu.hzu.java3.common.User.name to [Ljava.lang.String;
    参数的name的值不是一个字符串!
      

  5.   

    User.name是个String类型fields[i].set(user,map.get(name.toString())); // 这句map.get(name.toString())取到的是字符串数组类型String[]你把String[]类型赋值给String类型的name了。检查下request中的那个对应的Parameter的类型
      

  6.   

    你应该做下类型转换map.get(name.toString())转换成User类型
      

  7.   

    public class IllegalArgumentExceptionextends RuntimeException 抛出的异常表明向方法传递了一个不合法或不正确的参数。
      

  8.   

    谢谢
    request.getParameterMap()的返回类型是Map类型的对象,也就是符合key-value的对应关系,但这里要注意的是,value的类型是String[],而不是String. 得到jsp页面提交的参数很容易,但通过它可以将request中的参数和值变成一个map,以下是将得到的参数和值打印出来,形成的map结构:map(key,value[]),即:key是String型,value是String型数组。
    例如:request中的参数t1=1&t1=2&t2=3
    形成的map结构:
    key=t1;value[0]=1,value[1]=2
    key=t2;value[0]=3
    如果直接用map.get("t1"),得到的将是:Ljava.lang.String;   value只所以是数组形式,就是防止参数名有相同的情况。