关于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; } }
关于struts2的checkboxlist、select等标签发生could not be resolved as a collection/array/map/enumeration/iterator type异常的记录的更多相关文章
- Struts2 04--- 值栈 ognl(S标签)
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整 ...
- struts2设置<s:select>默认选中项的方法
struts2的select标签中,常用的有以下几个属性:(1)struts2中的select 标签中,必须设置的属性只有一个,即是list.(2)select标签的list中必须有值,不然会报错.如 ...
- 框架学习之Struts2(四)---拦截器和标签
一.拦截器概述 1.1 在struts2框架中封装了很多功能,struts2里面封装的功能都是在拦截器里面,struts2里面又很多拦截器,但不是每次这些拦截器都执行,每次执行型默认的拦截器. 默认拦 ...
- 解决Struts2.2.20版本的标签不支持style属性的问题
我先把Exception错误信息贴出来:org.apache.jasper.JasperException: /WEB-INF/jsp/topicAction/addUI.jsp (line: 40, ...
- struts2防止重复提交的标签
struts2 token 使用说明 --------------------------------------------------------------------------------- ...
- input/radio/select等标签的值获取和赋值
input/radio/select等标签的值获取和赋值,这几个是使用率最高的几个标签,获取值和赋值以及初始化自动填充数据和选择: 页面html: <div class=" " ...
- Struts2页面开发中常用标签使用说明
1. Struts2页面开发中常用标签使用说明 1.1.往action里传值的使用方式: <input name="userName" type="text&quo ...
- struts2一些概念介绍和标签的使用
依赖注入 模块包含 struts.xml的模块包含格式 <include file="xx.xml" > OGNL 对象导航语言 有个超大的好处就是根据对象访问属性 ...
- struts2中的表达元素标签使用详解
级联标签是使用:一级下拉框应该使用map对象的key集合作为下拉框元素,二级下了框应该使用一级下拉框对应的选择值自动的弹出待选择的元素值(集合) 页面代码如下:<s:set name=" ...
随机推荐
- bit-map牛刀小试:数组test[X]的值所有在区间[1, 8000]中, 现要输出test中反复的数。要求:1. 不能改变原数组; 2.时间复杂度为O(X);3.除test外空间不超过1KB
先来看看这个题目:数组test[X]的值所有在区间[1, 8000]中. 现要输出test中反复的数.要求:1. 不能改变原数组; 2.时间复杂度为O(X);3.除test外空间不超过1KB. 好, ...
- 一步一步学c#(四):继承
继承 1·继承的类型 在面向对象的编程中,有两种截然不同的继承类型,实现继承和接口继承. 实现继承:表示一个类型派生于一个基类型,它拥有该基类型的所有成员字段和函数. 接口继承:表示一个类型只继承了函 ...
- XStream和Json
XStream的作用 XStream可以把JavaBean对象转换成XML! 通常服务器向客户端响应的数据都是来自数据库的一组对象,而我们不能直接把对象响应给响应端,所以我们需要把对象转换成XML再响 ...
- JS图标插件
1.web开发中,有时候需要图标等控件,amcharts可以胜任. amcharts官方网址:http://www.amcharts.com/javascript-charts/
- tengine install
./configure --prefix=/home/admin/local/tengine --with-http_stub_status_module --with-http_ssl_module ...
- Spring学习之优缺点
Spring 1.Spring工作机制及为什么要用? Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.Spring既是一个AOP框架,也是一IOC容器. SpringFrame ...
- 去掉xcode编译warning:ld: warning: directory not found for option '
tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; text-align:left ...
- [转]WIN7系统安装Apache 提示msvcr110.DLL
我的系统是WIN7 64位,安装配置Apache2.4.7(httpd-2.4.7-win64-VC11.zip )提示如下错误 VC++2012 2013 百度网盘地址:http://pan.bai ...
- 有意思,搞了这么多年WEB,还是第一次知道这个东西 关键字 前端模板
有意思,搞了这么多年WEB,还是第一次知道这个东西 关键字 前端模板 jquery-tmpl handlebars 项目中用的是handlebars jqtmpl配置不成功 不做记载 百度吧 小媳妇 ...
- 贪吃蛇AI
贪吃蛇AI 作者:CodeNoob 转载请标明作者和出处 序言 前几天在网上看到一张让人涨姿势的图片,这张图片我很早以前看过,当时就觉得肯定是程序实现的,只是当时还比较渣,不会算法.这次学了java也 ...