The requested list key 'roles' could not be resolved as a collection/array/map/enumeration/iterator

  在一个应用struts2的项目中,某个页面点击提交标签后,会报如下错误:

The requested list key 'roles' could not be resolved as a collection/array/map/enumeration/iterator type

 

看看提示,报错的是一个select标签,但是该页面显示的时候是正常D,经排查原来 在struts配置中, 和这个页面相关的action配置是: error-->该页面,也就是说提交出错的话,仍然会回到该页面,由于select的数据源是个request请求的对象,所以出错返回的话是没有数据的.

总结:

出现这个错误的原因可能如下:

1 刚进入该界面的时候发生错误,原因是 list="roles"中的这个集合是空的,导致错误

解决办法很简单,不能让list为空

2 刚进入该界面的时候list是有数据的,当点击提交等按钮的时候,数据被提交到后台,如果配置了验证框架或者在action中写了validate方法,校验没有通过,未走action,直接返回了input,又指定回了当前界面。
此时的checkboxlist中的list丢失了,导致了如上错误(这个错误提示的不太友好,让人认为是类转换错误)

解决办法是把初始化list的工作放到prepare拦截器中,因为prepare是在validate拦截器之前执行,即实现prepareble接口:
   

 

posted on 2012-09-24 10:28  babyblue  阅读(1289)  评论(0)    收藏  举报