修改过程中学习到了<s:select>中用struts2标签显示的必须是对象型,即是使用hql查询出来的List符合。Jsp如下
<s:select style="140px;height:20px;" list="jcSbpcList" headerKey="" headerValue="" listKey="sbpc" listValue="sbpc" name="ztbModel.sbpc" theme="simple" ></s:select>
或者使用Sql查询出来的List进行转换:
List list = proxyService.getBasicdataService().getCxZndmList();
for(int i=0;i<list.size();i++){
Map map=new HashMap();
Object[] objs = (Object[]) list.get(i);
map.put("zndm", objs[2].toString()+"-"+objs[0].toString());
map.put("znmc", objs[2].toString()+"-"+objs[1].toString());
this.cxZndmList.add(map);
}
但是这种情况如果查询出来的List就一条数据会报出错:
java.lang.String cannot be cast to [Ljava.lang.Object;
出错的原因:Sql语句执行的查询结果只有一列时就会出现该问题,当有多个列时用数组去没有问题,如果只有一列会默认为String或者其他类型!
所以最终选择页面通过iterator循环来显示sql查询出来的List,注在此没有#
<select id="sbpct" name="ztbModel.sbpc" style="140px;height:20px;">
<option></option>
<s:iterator value="jcSbpcList" id="jcSbpcList">
<option value="<s:property value="jcSbpcList[0]"/>"><s:property value="jcSbpcList[0]"/></option>