request.getParameterMap()返回值map是一个不可更改的map

原处答案

       讲答案之前,先说说原因吧。其实出现这个问题很有意思。

       学了BaseServlet,可以在service中添加需要调用的方法。但是必须通过参数传递的方法指明需要调用的方法。而我写了一个form,method=post。是一个类似于注册的表单吧。所以hidden了一个参数。但是不巧,我传递过去之后使用的request.getParameterMap()去给对象赋值。

jsp:

servlet:    //tobean本质是BeanUtils.populate(bean, map);封装了一下。运行报错,发现map里面不仅有要赋值的对象还有我传递的那个调用方法的参数的k,v.

Customer cus = JavaBeanUtils.toBean(Customer.class, request.getParameterMap());

因为不知道怎么在jsp中把调用方法的参数拿出来写,所以想在servlet中的request.getParameterMap()把参数给remove掉。

结果最后还是出错了(即是本篇的中心:)

java.lang.IllegalStateException: No modifications are allowed to a locked ParameterMap 

字面上意思也很明显,意思是map被锁了,不允许修改。那可怎么办。。。查了下发现一个解决办法。测试有效。

		//封装对象
//		Map map = request.getParameterMap();//直接这样写它的map是一个不能修改的map
		Map map = new HashMap(request.getParameterMap());
        map.remove("funcName");

这样的方法创建map就可以修改了,其实很简单的吧0,0 

至于其为什么直接赋值的map就不能改变,恕我太菜,没搞懂。欢迎来解惑。

 

 

你可能感兴趣的:(学习笔记)