为什么jeecg没有用a.b而用了a_b

本文详细解析了一次使用EasyUI处理JSON数据时遇到的问题,从易UI源码出发,解释了为何易UI不支持'a.b'这种取值方式,并通过修改tojson方法解决了实际问题。同时,分享了作者在解决过程中遇到的挑战和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   说实话,我也是a.b的坚定用户者,我自己也为此花费了不少功夫。但是我发现我一直都没有问为什么用_?
而只是问为什么不用 .  之前还可笑的改了源码支持了 . 这种取值方式 直到昨天,写了一个拼装json的代码
以为以前jeecg因为json的原因而不使用的,可是花了一个晚上,自己改了toJson这个方法可以返回嵌套对象了,but,but,我差改了之后easyui完全挂了,a.b这种值竟然没有任何作用
才想起,可能是easyui的原因,是easyui不支持a.b这种取值方式,而不是jeecg不想支持,今天网上百度了下
easyui源码,虽然是1.0.2版本,但是这也是基础的。发现
尼玛obj[field]可以取值才怪呢,我差,easyui真是个人才,可怜我两个晚上
ps2:自己昨天写的tojson 
/**
	 * 循环LIST对象拼接EASYUI格式的JSON数据
	 * @param fields
	 * @param total
	 * @param list
         * 可以避免掉hibernate的延长加载
	 */
	public static String listtojson(String[] fields, int total, List list,String[] footers) throws Exception {
		StringBuilder sb = new StringBuilder();
		sb.append("{\"total\":" + total + ",\"rows\":[");
		Map<String,Object> fieldMap = getFieldMap(fields);
		for (int j = 0; j < list.size(); j++) {
			sb.append("{\"state\":\"closed\",");
			toJson(fieldMap,list.get(j),sb);
			if (j != list.size() - 1) {
				sb.append("},");
			} else {
				sb.append("}");
			}
		}
		sb.append("]");
		Object value;
		String footer;
		if(footers!=null){
			sb.append(",\'footer\':[{\'name\':\'合计\',");
			for(int i = 0;i<footers.length;i++){
				footer = footers[i];
				String footerFiled = footer.split(":")[0];
				if(footer.split(":").length==2){
					value = footer.split(":")[1];
				}else{
					value = TagUtil.getTotalValue(footerFiled,list);
				}
				sb.append("\'"+footerFiled+"\':\'"+value+"\'");
				if(i!=footers.length-1){
					sb.append(",");
				}
			}
			sb.append("}]");
		}
		sb.append("}");
		System.out.println(sb.toString());
		return sb.toString();
	}
	
	
	private static void toJson (Map<String,Object> fieldMap,Object obj,StringBuilder sb){
		Iterator<String> it = fieldMap.keySet().iterator();
		Object field,value;
		String key;
		String [] arr;
		while(it.hasNext()){
			key = it.next();
			field = fieldMap.get(key);
			if(field instanceof Map){
				sb.append("\""+key+"\":{");
				toJson((Map<String,Object>)field,obj,sb);
				sb.append("}");
			}else if(field instanceof String[]){
				arr = (String[])field;
				value = TagUtil.fieldNametoValues(arr[0], obj);
				sb.append("\"" + arr[1] + "\"" + ":\"" + value + "\"");
			}else{
				value = TagUtil.fieldNametoValues((String)field, obj);
				sb.append("\"" + field + "\"" + ":\"" + value + "\"");
			}
			if(it.hasNext()){
				sb.append(",");
			}
		}
	}
	/**
	 * 组装对象,把一个对象的元素放到一起
	 * @param fields
	 * @return
	 */
	private static Map<String, Object> getFieldMap(String[] fields) {
		Map<String,Object> results = new HashMap<String, Object>();
		for(int i = 0;i<fields.length;i++){
			if(fields[i].indexOf(".")>0){
				judgeFields(results,fields[i].split("\\."),fields[i]);//下面的多属性字段
			}else{
				results.put(fields[i], fields[i]);//这个对象的直接字段
			}
		}
		return results;
	}
	
	private static void judgeFields(Map<String, Object> results, String[] param,String field) {
		Map<String,Object> temp;
		for(int i = 0;i<param.length;i++){
			if(results.containsKey(param[i])){
				results = (Map<String,Object>)results.get(param[i]);
			}else{
				if(i==param.length-1){
					results.put(param[i],new String[]{field,param[i]});
				}else{
					temp = new HashMap<String, Object>();
					results.put(param[i],temp);
					results = temp;
				}
			}
		}
	}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值