表单提交使用getMdoel的时候报错ParameterMap cannot be cast to jHashMap


我的jdk版本1.7.0_79,tomcat7电脑是mac系统。

同样的代码在别人的电脑1.7.0_2低版本跑就没有问题,这个问题已经折磨我一下午了!!!!!

下面是代码和错误代码,求救~~

  1.         Invoice invoice=getModel(Invoice.class,"invoice");
  1. 2017-08-07 18:27:09
  2. [ERROR]-[Thread: http-bio-8080-exec-4]-[com.jfinal.core.ActionHandler.handle()]: /invoice/saveMessage
  3. java.lang.ClassCastException: org.apache.catalina.util.ParameterMap cannot be cast to java.util.HashMap
  4. at com.yawa.core.wrapper.RequestWrapper.getParameterMap(RequestWrapper.java:44)
  5. at com.jfinal.core.ModelInjector.injectActiveRecordModel(ModelInjector.java:87)
  6. at com.jfinal.core.ModelInjector.inject(ModelInjector.java:50)
  7. at com.jfinal.core.Controller.getModel(Controller.java:654)
  8. at com.yawa.invoice.controller.InvoiceController.saveMessage(InvoiceController.java:74)
  9. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  10. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  11. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  12. at java.lang.reflect.Method.invoke(Method.java:606)
  13. at com.jfinal.aop.Invocation.invoke(Invocation.java:71)
  14. at com.yawa.core.interceptor.SessionInterceptor.intercept(SessionInterceptor.java:66)
  15. at com.jfinal.aop.Invocation.invoke(Invocation.java:65)
  16. at com.jfinal.core.ActionHandler.handle(ActionHandler.java:74)
  17. at com.yawa.core.handler.XssHandler.handle(XssHandler.java:18)
  18. at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72)
  19. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
  20. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
  21. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
  22. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
  23. at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
  24. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
  25. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
  26. at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
  27. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
  28. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
  29. at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
  30. at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
  31. at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
  32. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
  33. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  34. at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
  35. at java.lang.Thread.run(Thread.java:745)


评论区

JFinal

2017-08-07 19:43

几乎可以确定是你们自己改过 jfinal 源代码,因为出现异常的代码在 jfinal 中如下:
Map parasMap = request.getParameterMap();

从上面代码可以看出来,变量类型是 java.util.Map,这是绝对不可能出错的,而你的异常提示接收参数的类型是 java.util.HashMap。很明显示是对 jfinal 源码进行改造过的版本

mrgaoang

2017-08-08 09:22

@JFinal 感谢波哥回复,可以肯定的说没有修改过jfinal源码,因为同一个项目放在其他电脑上是可以正常运行的。为了避免我本地确实有改过源码,我重新下载了jfinal的包替换了原来的包,结果是一样的。所以问题可能在其他地方,我怀疑是jdk版本问题。

Psbye

2017-09-30 17:19

你有二次封装request吗?我今天也遇到过。我遇到的是高版本的jdk比较严谨,不能直接把 request.getParameterMap(); to hashmap

mcg

2018-08-06 14:15

请问最后是怎么解决的啊?我也遇到了同样的问题

jesse8850

2018-08-15 11:02

我也遇到这个问题了,确实是有人重写了Jfinal底层代码不是JDK版本问题

Noobs

2018-09-28 15:43

我也遇到了 这个问题 因为要过滤xss攻击 我自己从写了 getParameterMap 就报错了

cuichuanjin

2019-05-09 17:12

Tomcat版本过高,使用7试试,我就是这样解决的

热门反馈

扫码入社