1. 程式人生 > >request.getParameterMap()返回值map是一個不可更改的map

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

原處答案

       講答案之前,先說說原因吧。其實出現這個問題很有意思。

       學了BaseServlet,可以在service中新增需要呼叫的方法。但是必須通過引數傳遞的方法指明需要呼叫的方法。而我寫了一個form,method=post。是一個類似於註冊的表單吧。所以hidden了一個引數。但是不巧,我傳遞過去之後使用的request.getParameterMap()去給物件賦值。

jsp:

<input type="hidden" name="funcName" value="addCustomer"/>

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<String, String[]> map = request.getParameterMap();//直接這樣寫它的map是一個不能修改的map
		Map<String, String[]> map = new HashMap<String,String[]>(request.getParameterMap());
        map.remove("funcName");

這樣的方法建立map就可以修改了,其實很簡單的吧0,0 

至於其為什麼直接賦值的map就不能改變,恕我太菜,沒搞懂。歡迎來解惑。