关于struts2的checkboxlist、select等标签发生could not be resolved as a collection/array/map/enumeration/iterator type异常的记录
1 刚进入该界面的时候发生错误,原因是 list="roles"中的这个集合是空的,导致错误
解决办法很简单,不能让list为空
2
刚进入该界面的时候list是有数据的,当点击提交等按钮的时候,数据被提交到后台,如果配置了验证框架或者在action中写了validate方法,校验没有通过,未走action,直接返回了input,又指定回了当前界面。
此时的checkboxlist中的list丢失了,导致了如上错误(这个错误提示的不太友好,让人认为是类转换错误)
解决办法是把初始化list的工作放到prepare拦截器中,因为prepare是在validate拦截器之前执行,即实现prepareble接口:
publicclass RoleAction extends ActionSupport implements Preparable{
@Override
publicvoid prepare() throws Exception {
//初始化list
}
}
意思就是你这个类实现接口Preparable里的prepare,把原先获取list放入到prepare()方法中,然后在原先List语句上调用这个方法就OK
package com.ccse.frame.action.rule; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.annotation.Resource; import com.ccse.core.SeqManager; import com.ccse.core.command.QueryFilter; import com.ccse.core.command.sql.SqlQueryFilter; import com.ccse.core.command.sql.SqlSpellerDbType; import com.ccse.core.util.BeanUtil; import com.ccse.core.web.action.BaseAction; import com.ccse.frame.model.base.BaseUser; import com.ccse.frame.model.rule.RuleAutogeneration; import com.ccse.frame.service.rule.RuleAutogenerationService; import com.ccse.oa.util.ContextUtil; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.opensymphony.xwork2.Preparable; /** * 证书自动生成规则 * * @author hackermi * @date 2013-7-3 下午02:33:30 */ public class RuleAutogenerationAction extends BaseAction implements Preparable{ /** * */ private static final long serialVersionUID = 1L; @Resource private RuleAutogenerationService ruleAutogenerationService; private RuleAutogeneration ruleAutogeneration; private String ruleId; //创建新版本 private boolean ruleRoot = false ; public boolean getRuleRoot() { return ruleRoot; } public void setRuleRoot( boolean ruleRoot) { this .ruleRoot = ruleRoot; } public String getRuleId() { return ruleId; } public void setRuleId(String ruleId) { this .ruleId = ruleId; } public RuleAutogeneration getRuleAutogeneration() { return ruleAutogeneration; } public void setRuleAutogeneration(RuleAutogeneration ruleAutogeneration) { this .ruleAutogeneration = ruleAutogeneration; } /** * 显示列表 */ public String list() { QueryFilter filter = new QueryFilter(getReq()); List<RuleAutogeneration> list = ruleAutogenerationService .getAll(filter); Type type = new TypeToken<List<RuleAutogeneration>>() { }.getType(); StringBuffer buff = new StringBuffer( "{\"total\":" ).append( filter.getPagingBean().getTotalItems()).append( ",\"rows\":" ); Gson gson = new Gson(); buff.append(gson.toJson(list, type)); buff.append( "}" ); jsonString = buff.toString(); return SUCCESS; } /** * 批量删除 * * @return */ public String multiDel() { String ids = getReq().getParameter( "ids" ); if (ids != null ) { for (String id : ids.split( "," )) { ruleAutogenerationService.remove(id); } } jsonString = "{success:true}" ; return SUCCESS; } public void prepare() throws Exception { // TODO Auto-generated method stub List sysTypes=ruleAutogenerationService.getsysType(); //所属类型 List sysType= new ArrayList(); for ( int i = 0 ; i < sysTypes.size(); i++) { System.out.println(sysTypes.get(i)); } Iterator<?> itr = sysTypes.iterator(); while (itr.hasNext()) { Map<?, ?> nextObj = (Map<?, ?>) itr.next(); String value=(String) nextObj.get( "ywcode" ); sysType.add(value.trim()); // sysType.add((String)nextObj.get("ywcode")); } this .getRequest().put( "sysType" , sysType); } /** * 新增SAMIS * * @return */ public String getSAMIS() { try { // List sourCeNames=ruleAutogenerationService.getSourCeName(); // this.getRequest().put("sourcenames", sourCeNames);//系统类型 String ruleRoot = this .getReq().getParameter( "ruleRoot" ); // 是否是创建新版本 if (ruleId != null && ! "" .equals(ruleId)) { ruleAutogeneration = ruleAutogenerationService.get(ruleId); if (ruleRoot != null && ! "" .equals(ruleRoot)) { ruleAutogeneration.setRuleRoot(ruleRoot); this .getReq().setAttribute( "ruleRoot" , ruleRoot); } } this .prepare(); this .setForwardPage( "/pages/rule/RuleAutogenerationSAMISForm.jsp" ); jsonString = null ; return SUCCESS; } catch (Exception e) { e.printStackTrace(); return this .err(e); } } /** * 新增SSMIS * * @return */ public String getSSMIS() { try { //List sourCeNames=ruleAutogenerationService.getSourCeName(); // this.getRequest().put("sourcenames", sourCeNames);//所属系统 String ruleRoot = this .getReq().getParameter( "ruleRoot" ); // 是否是创建新版本 if (ruleId != null && ! "" .equals(ruleId)) { ruleAutogeneration = ruleAutogenerationService.get(ruleId); if (ruleRoot != null && ! "" .equals(ruleRoot)) { ruleAutogeneration.setRuleRoot(ruleRoot); this .getReq().setAttribute( "ruleRoot" , ruleRoot); } } this .setForwardPage( "/pages/rule/RuleAutogenerationSSMISForm.jsp" ); jsonString = null ; return SUCCESS; } catch (Exception e) { e.printStackTrace(); return this .err(e); } } /** * 添加及保存操作 */ public String save() { try { BaseUser baseUser = ContextUtil.getCurrentUser(); //新增 if (ruleAutogeneration.getRuleId() == null || "" .equals(ruleAutogeneration.getRuleId())) { ruleAutogeneration.setRuleId( null ); ruleAutogeneration.setRuleVersion( "1.0" ); ruleAutogeneration.setRuleRoot(SeqManager.getSeqMang().getUUID()); //根节点 ruleAutogeneration.setLastUpdateTime( new Date()); // 修改时间 ruleAutogeneration.setCreTime( new Date()); // 创建时间 ruleAutogeneration.setCreUserId(baseUser.getId()); // 创建人ID ruleAutogeneration.setCreUserName(baseUser.getUsername()); // 创建人姓名 ruleAutogenerationService.save(ruleAutogeneration); } else { RuleAutogeneration orgRuleAutogeneration = ruleAutogenerationService.get(ruleAutogeneration.getRuleId()); if ( null != orgRuleAutogeneration) { BeanUtil.copyNotNullProperties(orgRuleAutogeneration, ruleAutogeneration); //创建新版本 if (ruleRoot) { ruleAutogenerationService.evict(orgRuleAutogeneration); //清空旧对象的缓存 orgRuleAutogeneration.setRuleId( null ); orgRuleAutogeneration.setRuleVersion(ruleAutogenerationService.getBigVersion(orgRuleAutogeneration)); orgRuleAutogeneration.setLastUpdateTime( new Date()); //修改时间 orgRuleAutogeneration.setCreTime( new Date()); //创建时间 orgRuleAutogeneration.setCreUserName(baseUser.getUsername()); ruleAutogenerationService.save(orgRuleAutogeneration); } else { //修改 orgRuleAutogeneration.setLastUpdateTime( new Date()); // 修改时间 orgRuleAutogeneration.setUpdateUserId(baseUser.getId()); //修改创建人ID orgRuleAutogeneration.setUpdateUserName(baseUser.getUsername()); // 修改人姓名 ruleAutogenerationService.save(orgRuleAutogeneration); } } else { throw new RuntimeException( "对象不存在" ); } } } catch (Exception ex) { logger.error(ex.getMessage()); ex.printStackTrace(); } setJsonString( "{success:true}" ); if (ruleAutogeneration.getSysId().equals( "SAMIS" )) { this .setForwardPage( "/pages/rule/RuleAutogenerationSAMISForm.jsp" ); } else if (ruleAutogeneration.getSysId().equals( "SSMIS" )) { this .setForwardPage( "/pages/rule/RuleAutogenerationSSMISForm.jsp" ); } return SUCCESS; } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步