zoukankan      html  css  js  c++  java
  • 关于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;
    
    	}
    
    }
    

      

  • 相关阅读:
    CXF学习(2) helloworld
    foreach与Iterable学习
    java基础之JDBC八:Druid连接池的使用
    java基础之JDBC七:C3P0连接池的使用
    java基础之JDBC六:DBCP 数据库连接池简介
    java基础之JDBC五:批处理简单示例
    java基础之JDBC四:事务简单示例
    java基础之JDBC三:简单工具类的提取及应用
    java基础之JDBC二:原生代码基础应用
    java基础之JDBC一:概述及步骤详解
  • 原文地址:https://www.cnblogs.com/hackermi/p/3179693.html
Copyright © 2011-2022 走看看