JSP配合Struts2开发下拉框时list键无法解析为集合异常如何解决
问题根因
你的viewService类中roleList对应的Getter方法命名不符合JavaBean规范,导致Struts2的OGNL表达式无法正确解析获取roleList集合。
你贴出的代码里,方法名写为geRoleList(),缺了get前缀的字母t,正确的命名应该是getRoleList()。Struts2解析viewService.roleList属性时,会自动按照JavaBean规范查找名为getRoleList()的公共方法,命名不匹配就无法获取到返回的List对象,因此抛出无法解析为集合/数组/映射等可迭代类型的异常。
其余下拉框正常是因为对应业务属性的Getter方法命名都符合规范,仅该方法存在拼写错误。
解决步骤
- 修正
viewService中的方法命名:
// 修正前 public List<Role> geRoleList() { // 原有逻辑 } // 修正后 public List<Role> getRoleList() { if (roleList == null) this.roleList = persistenceService.getEntities(Role.class); LOG.debug("getting roles, size "+roleList.size()); return roleList; }
- 重新编译部署项目即可。
如果需要快速验证问题,可以临时将JSP中s:select的list属性改为直接调用方法list="viewService.geRoleList()",确认下拉框可正常加载后再改回规范的属性写法即可。
内容的提问来源于stack exchange,提问作者Erik Andersen
相关产品推荐
相关产品推荐

