虚位以待(AD)
虚位以待(AD)
首页 > 网络编程 > AJAX相关 > 使用Ajax或Easyui等框架时的Json-lib的处理方案

使用Ajax或Easyui等框架时的Json-lib的处理方案
类别:AJAX相关   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了使用ajax或easyui等框架时的Json-lib的处理方案 ,需要的朋友可以参考下

无论是使用ajax还是使用easyui等框架,后台向前台输出数据时都涉及到json处理的问题,这里介绍两种处理方法,第一种是手动配置json的处理方法,另一种使用json-lib的处理方案。普通手动配置方法比较笨拙,每次需要根据字段名逐个配置,因此也无法再其他对象上使用,降低了代码的重用性,使用json-lib工具可以实现自动处理,针对不同的对象又不同的处理措施,大大提高了处理效率和代码的重用性,以下分别根据案例介绍两种方法的过程:

方法一:普通方法,通过手动配置转型的过程,以easyui的请求方法为例,前台通过dategrid向后台请求用户列表数据,数据中存在普通字段(int、String)数据,也有日期(date)数据,

jsp页面:

    <table id="dg" title="用户管理" class="easyui-datagrid" fitColumns="true" pagination="true" rownumbers="true" url="${
    pageContext.request.contextPath}
    /user_list.action" fit="true" toolbar="#tb"> <thead> <tr> <th field="cb" checkbox="true" align="center"></th> <th field="id" width="50" align="center">编号</th> <th field="trueName" width="80" align="center">真实姓名</th> <th field="userName" width="80" align="center">用户名</th> <th field="password" width="80" align="center">密码</th> <th field="sex" width="50" align="center">性别</th> <th field="birthday" width="100" align="center">出生日期</th> <th field="identityId" width="130" align="center">身份证</th> <th field="email" width="120" align="center">邮件</th> <th field="mobile" width="80" align="center">联系电话</th> <th field="address" width="100" align="center">家庭地址</th> </tr> </thead></table>

*******************************************************************************************************************************************************

action层:

    public void list()throws Exception{
    PageBean pageBean=new PageBean(Integer.parseInt(page), Integer.parseInt(rows));
    List<User> userList=userService.findUserList(s_user, pageBean);
    Long total=userService.getUserCount(s_user);
    JSONObject result=new JSONObject();
    JSONArray jsonArray=JsonUtil.formatUserListToJsonArray(userList);
    //easyui接收属性为rows(数据内容)和total(总记录数) result.put("rows", jsonArray);
    result.put("total", total);
    //获取response对象 ResponseUtil.write(ServletActionContext.getResponse(), result);
    }

*******************************************************************************************************************************************************

util工具:

    public class JsonUtil {
    /** * 将List结果集转化为JsonArray * @param gradeService * @param stuList * @return * @throws Exception */ public static JSONArray formatUserListToJsonArray(List<User> userList)throws Exception{
    JSONArray array=new JSONArray();
    for(int i=0;
    i<userList.size();
    i++){
    User user=userList.get(i);
    JSONObject jsonObject=new JSONObject();
    jsonObject.put("userName", user.getUserName());
    //需手动逐个配置json的key-code jsonObject.put("password", user.getPassword());
    jsonObject.put("trueName", user.getTrueName());
    jsonObject.put("sex", user.getSex());
    jsonObject.put("birthday", DateUtil.formatDate((user.getBirthday()), "yyyy-MM-dd"));
    jsonObject.put("identityId", user.getIdentityId());
    jsonObject.put("email", user.getEmail());
    jsonObject.put("mobile", user.getMobile());
    jsonObject.put("address", user.getAddress());
    jsonObject.put("id", user.getId());
    array.add(jsonObject);
    }
    return array;
    }
    }

方法二:使用jsonLib工具完成处理,以easyui的请求方法为例,前台通过dategrid向后台请求商品列表数据,数据中存在普通字段(int、String)数据,也有日期(date)数据,同时商品对象(Product)还级联了类别对象(ProductType)

jsp页面:

    <table id="dg" title="商品管理" class="easyui-datagrid"fitColumns="true" pagination="true" rownumbers="true" url="${
    pageContext.request.contextPath}
    /product_list.action" fit="true" toolbar="#tb"> <thead> <tr> <th field="cb" checkbox="true" align="center"></th> <th field="id" width="50" align="center" hidden="true">编号</th> <th field="proPic" width="60" align="center" formatter="formatProPic">商品图片</th> <th field="name" width="150" align="center">商品名称</th> <th field="price" width="50" align="center">价格</th> <th field="stock" width="50" align="center">库存</th> <th field="smallType.id" width="100" align="center" formatter="formatTypeId" hidden="true">所属商品类id</th> <th field="smallType.name" width="100" align="center" formatter="formatTypeName">所属商品类</th> <th field="description" width="50" align="center" hidden="true">描述</th> <th field="hotTime" width="50" align="center" hidden="true">上架时间</th> </tr> </thead></table>

*******************************************************************************************************************************************************

action层:

    public void list() throws Exception{
    PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));
    List<Product> productList=productService.getProducts(s_product, pageBean);
    long total=productService.getProductCount(s_product);
    //使用jsonLib工具将list转为json JsonConfig jsonConfig=new JsonConfig();
    jsonConfig.setExcludes(new String[]{
    "orderProductList"}
    );
    //非字符串对象不予处理 jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd"));
    //处理日期 jsonConfig.registerJsonValueProcessor(ProductType.class,new ObjectJsonValueProcessor(new String[]{
    "id","name"}
    , ProductType.class));
    //处理类别list对象 JSONArray rows=JSONArray.fromObject(productList, jsonConfig);
    JSONObject result=new JSONObject();
    result.put("rows", rows);
    result.put("total", total);
    ResponseUtil.write(ServletActionContext.getResponse(), result);
    }

*******************************************************************************************************************************************************

util工具:

    /** * json-lib 日期处理类 * @author Administrator * */public class DateJsonValueProcessor implements JsonValueProcessor{
    private String format;
    public DateJsonValueProcessor(String format){
    this.format = format;
    }
    public Object processArrayValue(Object value, JsonConfig jsonConfig) {
    // TODO Auto-generated method stub return null;
    }
    public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
    if(value == null) {
    return "";
    }
    if(value instanceof java.sql.Timestamp) {
    String str = new SimpleDateFormat(format).format((java.sql.Timestamp)value);
    return str;
    }
    if (value instanceof java.util.Date) {
    String str = new SimpleDateFormat(format).format((java.util.Date) value);
    return str;
    }
    return value.toString();
    }
    }
    /** * 解决对象级联问题 * @author Administrator * */public class ObjectJsonValueProcessor implements JsonValueProcessor{
    /** * 保留的字段 */ private String[] properties;
    /** * 处理类型 */ private Class<?> clazz;
    /** * 构造方法 * @param properties * @param clazz */ public ObjectJsonValueProcessor(String[] properties,Class<?> clazz){
    this.properties = properties;
    this.clazz =clazz;
    }
    public Object processArrayValue(Object arg0, JsonConfig arg1) {
    // TODO Auto-generated method stub return null;
    }
    public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
    PropertyDescriptor pd = null;
    Method method = null;
    StringBuffer json = new StringBuffer("{
    ");
    try{
    for(int i=0;
    i<properties.length;
    i++){
    pd = new PropertyDescriptor(properties[i], clazz);
    method = pd.getReadMethod();
    String v = String.valueOf(method.invoke(value));
    json.append("'"+properties[i]+"':'"+v+"'");
    json.append(i != properties.length-1?",":"");
    }
    json.append("}
    ");
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    return JSONObject.fromObject(json.toString());
    }
    }

以上所述是小编给大家介绍的使用Ajax或Easyui等框架时的Json-lib的处理方案,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

相关热词搜索: ajax easyui框架 json lib