今天在做easyui列表页面回显字典表数据时候遇到一个json解析的奇怪问题,
首先我用spring getHibernateTemplate()中的createSQLQuery进行数据查询 查出来的数据是
[2,2,2,2,2,2,2,]之类的
public List findByPage(final String hql, final Object[] values, final int currentpage,
final int pagesize) throws HibernateException {
// 通过一个HibernateCallback对象来执行查询
List list = (List) getHibernateTemplate().execute(
new HibernateCallback() {
// 实现HibernateCallback接口必须实现的方法
public Object doInHibernate(Session session)
throws HibernateException {
// 执行Hibernate分页查询
SQLQuery query = session.createSQLQuery(hql);
// 为hql语句传入参数
if (values!=null) {
for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
// 执行Hibernate分页查询
List result = query.setFirstResult((currentpage - 1) * pagesize)
.setMaxResults(pagesize).list();
List<HashMap<String,Object>> lm = new ArrayList<HashMap<String,Object>>();
for(int i = 0; i < result.size(); i++){
HashMap<String, Object> m = (HashMap<String, Object>) result.get(i);
Iterator it = m.keySet().iterator();
while(it.hasNext()){
String key = (String)it.next();
if(m.get(key) == null){
m.put(key, "");
}
}
lm.add(m);
}
return lm;
}
});
return list;
}
但是我easyUI 的前台datagride显示数据需要json格式为
[{key:value,key.value}]这种的 所以我用query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);对其进行转化
转化之后数据格式是对了但是如果数据为null和日期的话,json传到前台就变成对象类型null变为{},时间变成一个对象,前台页面会显示[object Object]
在经理的帮助下 暂时解决了处理null的话
在dao实现里处理
List<HashMap<String,Object>> lm = new ArrayList<HashMap<String,Object>>();
for(int i = 0; i < result.size(); i++){
HashMap<String, Object> m = (HashMap<String, Object>) result.get(i);
Iterator it = m.keySet().iterator();
while(it.hasNext()){
String key = (String)it.next();
if(m.get(key) == null){
m.put(key, "");
}
}
lm.add(m);
}
时间时timestamp类型就在action中处理
cfg.registerJsonValueProcessor(Timestamp.class,new JsonDateValueProcessor());
问题就解决了 页面可以正常显示了。但是不明白具体的原理,忘朋友们知道的告知,并提供正确的解决方案。