Hibernate返回Action一个List结果集,需要循环遍历结果集,然后把每循环一条记录添加到Json数组中
        /**
 * 省级联动市级
 * @return
 */
@SuppressWarnings("unchecked")
public String findCityKind_byProvinceId(){
Object [] obj = new Object[]{this.getAreaid()};
List middle = (List)this.getDepartmentService().findCityKind_byProvinceId(obj);
int count = middle.size();
selectOptions=new ArrayList<String>(count);
Iterator iterator = middle.iterator();
StringBuffer jsonString = new StringBuffer();
jsonString.append("[");
int i = 0;
while(iterator.hasNext()){
i++;
this.setBasArea((BasArea)iterator.next());//出现异常:[Ljava.lang.Object; cannot be cast to com.domain.basic.BasArea
jjsonString.append("{");
jsonString.append("areaId:");
jsonString.append("'"+this.getBasArea().getAreaid()+"'");
jsonString.append(",areaName:");
jsonString.append("'"+this.getBasArea().getShortareaname()+"'");
jsonString.append("}");
if(i < count){
jsonString.append(",");
}
}
jsonString.append("]");
selectOptions.add(jsonString.toString());
return SUCCESS;
}
这是升级下拉框联动市级下拉框的方法,异常部分是因为Hibernate采用的是SQLQuery执行方法。
想问问有没有其他方法循环遍历List,然后放到Json数组里?

解决方案 »

  1.   

    middle是一个什么样的List啊list里面存的对象不对转为BasArea
      

  2.   

    return getHibernateTemplate().execute(new HibernateCallback() {
    public Object doInHibernate(Session session) throws HibernateException {
    Object [] object = (Object [])obj;
    String sql = "select AREAID,SHORTAREANAME from BAS_AREA T where t.arealevel = 2 and t.areaid like concat(?,'%') order by areaid";
    SQLQuery query = session.createSQLQuery(sql);
    query.setParameter(0, object[0]);
    return query.list();
    }
    });
    middle里存的就是从数据库BasArea表里查出来的结果集
      

  3.   

    query .addEntity(表别名, BasArea.class);
      

  4.   

    可以输出iterator.next().getClass()看看list里放的是什么对象。另外感觉楼主操作字符串不是很好。
    JONArray 里可以放对象,之后再用他的toString()方法就可以得到你想要的结果了。
      

  5.   

    这也太麻烦了吧。需要这么构建吗,你用了hibernate,一定也用了struts2吧
    直接用struts2的json插件多方便呀。
    就是不用sturts2,你看看net.sf.json.JSONArray
    这个json框架