关于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;
 
    }
 
}

  

posted on   hackermi  阅读(645)  评论(0编辑  收藏  举报

努力加载评论中...

导航

点击右上角即可分享
微信分享提示