1.首先要准备一个JSONUtile工具类,来实现数据的JSON转换
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.main.manage.entity.TCatalog; import org.main.manage.entity.TNews; import org.main.manage.entity.TProduct; import org.main.manage.entity.TProductAttrib; import org.main.manage.entity.TProductDeal; import org.main.manage.entity.TProductPicture; import org.main.manage.entity.TSeo; import org.main.manage.entity.TWholesale; /** * 将Java object装换为JSON字符串. * * @author wangqun */ public final class JsonUtil { //是否是第一次执行判断 private static int mapCount = 0; /** * Convert a Java object to JSON string. */ public static String toJson(Object o) throws NoSuchMethodException,InvocationTargetException,IllegalAccessException{ if (o==null) return "null"; if (o instanceof List) return array2Json(((List) o).toArray()); if (o instanceof String) return string2Json((String)o); if (o instanceof Boolean) return boolean2Json((Boolean)o); if (o instanceof Number) return number2Json((Number)o); if (o instanceof Date) return date2Json((Date)o); if (o instanceof Map) return map2Json((Map)o); if (o instanceof Object[]) return array2Json((Object[])o); if (o instanceof int[]) return intArray2Json((int[])o); if (o instanceof boolean[]) return booleanArray2Json((boolean[])o); if (o instanceof long[]) return longArray2Json((long[])o); if (o instanceof float[]) return floatArray2Json((float[])o); if (o instanceof double[]) return doubleArray2Json((double[])o); if (o instanceof short[]) return shortArray2Json((short[])o); if (o instanceof byte[]) return byteArray2Json((byte[])o); return entity2Json(o); } static String array2Json(Object[] array) throws NoSuchMethodException,InvocationTargetException,IllegalAccessException{ if (array.length==0) return "[]"; StringBuffer sb = new StringBuffer(array.length << 4); sb.append('['); for (int i = 0; i < array.length; i++) { Object o = array[i]; sb.append(toJson(o)); sb.append(','); } sb.setCharAt(sb.length()-1, ']'); return sb.toString(); } static String intArray2Json(int[] array) { if (array.length==0) return "[]"; StringBuffer sb = new StringBuffer(array.length << 4); sb.append('['); for (int i = 0; i < array.length; i++) { int o = array[i]; sb.append(Integer.toString(o)); sb.append(','); } sb.setCharAt(sb.length()-1, ']'); return sb.toString(); } static String longArray2Json(long[] array) { if (array.length==0) return "[]"; StringBuffer sb = new StringBuffer(array.length << 4); sb.append('['); for (int i = 0; i < array.length; i++) { long o = array[i]; sb.append(Long.toString(o)); sb.append(','); } sb.setCharAt(sb.length()-1, ']'); return sb.toString(); } static String booleanArray2Json(boolean[] array) { if (array.length==0) return "[]"; StringBuffer sb = new StringBuffer(array.length << 4); sb.append('['); for (int i = 0; i < array.length; i++) { boolean o = array[i]; sb.append(Boolean.toString(o)); sb.append(','); } sb.setCharAt(sb.length()-1, ']'); return sb.toString(); } static String floatArray2Json(float[] array) { if (array.length==0) return "[]"; StringBuffer sb = new StringBuffer(array.length << 4); sb.append('['); for (int i = 0; i < array.length; i++) { float o = array[i]; sb.append(Float.toString(o)); sb.append(','); } sb.setCharAt(sb.length()-1, ']'); return sb.toString(); } static String doubleArray2Json(double[] array) { if (array.length==0) return "[]"; StringBuffer sb = new StringBuffer(array.length << 4); sb.append('['); for (int i = 0; i < array.length; i++) { double o = array[i]; sb.append(Double.toString(o)); sb.append(','); } sb.setCharAt(sb.length()-1, ']'); return sb.toString(); } static String shortArray2Json(short[] array) { if (array.length==0) return "[]"; StringBuffer sb = new StringBuffer(array.length << 4); sb.append('['); for (int i = 0; i < array.length; i++) { short o = array[i]; sb.append(Short.toString(o)); sb.append(','); } sb.setCharAt(sb.length()-1, ']'); return sb.toString(); } static String byteArray2Json(byte[] array) { if (array.length==0) return "[]"; StringBuffer sb = new StringBuffer(array.length << 4); sb.append('['); for (int i = 0; i < array.length; i++) { byte o = array[i]; sb.append(Byte.toString(o)); sb.append(','); } sb.setCharAt(sb.length()-1, ']'); return sb.toString(); } static String map2Json(Map map) throws NoSuchMethodException,InvocationTargetException,IllegalAccessException{ if (map.isEmpty()) return "{}"; StringBuffer sb = new StringBuffer(map.size() << 4); if(mapCount++ > 0){ sb.append('['); } sb.append('{'); Set keys = map.keySet(); Iterator iters = keys.iterator(); while(iters.hasNext()){ String key = (String)iters.next(); Object value = map.get(key); sb.append('\"'); sb.append(key); sb.append('\"'); sb.append(':'); sb.append(toJson(value)); sb.append(','); } sb.setCharAt(sb.length()-1, '}'); //第一次执行标记 if(--mapCount > 0){ sb.append(']'); } return sb.toString(); } static String boolean2Json(Boolean bool) { return bool.toString(); } static String number2Json(Number number) { return number.toString(); } static String date2Json(Date date) { if (null == date) return "null"; StringBuffer sb = new StringBuffer(); sb.append('"'); sb.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)); sb.append('"'); return sb.toString(); } static String string2Json(String s) { StringBuffer sb = new StringBuffer(s.length()+20); sb.append('\"'); for (int i=0; i<s.length(); i++) { char c = s.charAt(i); switch (c) { case '\"': sb.append("\\\""); break; case '\\': sb.append("\\\\"); break; case '/': sb.append("\\/"); break; case '\b': sb.append("\\b"); break; case '\f': sb.append("\\f"); break; case '\n': sb.append("\\n"); break; case '\r': sb.append("\\r"); break; case '\t': sb.append("\\t"); break; default: sb.append(c); } } sb.append('\"'); return sb.toString(); } static String entity2Json(Object o) throws NoSuchMethodException,InvocationTargetException,IllegalAccessException{ if (null == o) return "null"; return toJson(getBeanMap(o)); } public static Map getBeanMap(Object obj) throws NoSuchMethodException,InvocationTargetException,IllegalAccessException{ if(null == obj){ return null; } Map resMap = new HashMap(); Method[] methods = obj.getClass().getDeclaredMethods(); for (int i = 0; i < methods.length; i++) { Method method = methods[i]; String methodName = method.getName(); if(methodName.startsWith("get")){ Object methodValue = obj.getClass().getDeclaredMethod(methodName, null).invoke(obj, null); String attrName = methodName.substring(3,4).toLowerCase()+methodName.substring(4); resMap.put(attrName, methodValue); valiAttr(methodValue); } } return resMap; } /** * 判断属性是否为集合,如果为集合外部用"[]"包裹 * @param obj */ public static void valiAttr(Object o){ if (o instanceof Map) return ; if (o instanceof Object[]) return; if (o instanceof int[]) return; if (o instanceof boolean[]) return; if (o instanceof long[]) return; if (o instanceof float[]) return; if (o instanceof double[]) return; if (o instanceof short[]) return; if (o instanceof byte[]) return; //"[]"执行标记 --mapCount; } }这个可以对List、Map、自定义实体类数据等直接拼接
2.struts2框架搭建好后,在BaseAction中构建变量、方法
protected String ajaxData; public String getAjaxData() { return ajaxData; } public void setAjaxData(String ajaxData) { this.ajaxData = ajaxData; }
3.在struts.xml配置文件中配置全局返回页面
<global-results> <result name="ajax" >/ajax.jsp</result> </global-results>
<%@ page language="java" pageEncoding="UTF-8" import="org.main.common.util.*"%> <%@ taglib prefix="s" uri="/struts-tags"%> <s:property value="ajaxData" escape="false"/>
public String test_json() throws Exception{
//逻辑代码
ajaxData = 返回数据;
return SUCCESS;
}
4.页面中js代码:
<script type="text/javascript"> function testJSON(){ $.ajax({url:'test_json.action', data:{time:Math.random()}, dataType: "json", success:function(res){ alert(res); $.each(res,function(i,n){ alert(i+":"+n["orderNo"]); }) } }); } </script>