使用ajax或easyui等框架时的Json-lib的处理方案
来源:互联网 发布:河海大学网络教学平台 编辑:程序博客网 时间:2024/05/21 04:43
无论是使用ajax还是使用easyui等框架,后台向前台输出数据时都涉及到json处理的问题,这里介绍两种处理方法,第一种是手动配置json的处理方法,另一种使用json-lib的处理方案。普通手动配置方法比较笨拙,每次需要根据字段名逐个配置,因此也无法再其他对象上使用,降低了代码的重用性,使用json-lib工具可以实现自动处理,针对不同的对象采取不同的处理措施,同时可解决需要处理对象A与其他对象B的级联(一对多、多对多等)情况下的取值,避免陷入A=>B=>A=>B相互递归取值陷入死循环的问题,同时也大大提高了处理效率和代码的重用性,以下分别根据案例介绍两种方法的过程:
方法一:普通方法,通过手动配置转型的过程,以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转为jsonJsonConfig 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 stubreturn 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 stubreturn 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框架实现团购或秒杀的无刷新倒计时方案
- json-lib的使用
- JSON-Lib的使用
- json lib的使用
- json-lib的使用
- json-lib的使用
- Json-lib的使用
- JSON-lib的使用
- Struts2下使用ExtJs、Jquery等Ajax框架传递XML、JSON的方法
- ajax的json框架
- json-lib包的使用
- Json-lib的使用小结
- Json-lib的简单使用
- 使用json.org和json-lib来处理json字符串和java对象的转化
- ajax框架--jsonrpc-JSON-RPC框架的使用步骤
- EasyUI+Ajax+Json+一般处理程序实现数据的前台与后台的交互
- EasyUI+Ajax+Json+一般处理程序实现数据的前台与后台的交互
- web系统国际化方案
- 如果maven修改了默认端口,但是启动的时候报8080倍占用,遇到的问题原因
- WebApp Ionic +webStorm开发 环境搭建
- python:爬虫系列-01
- Android自定义动画专题一
- 使用ajax或easyui等框架时的Json-lib的处理方案
- 强势文化与弱势文化
- centos7安装配置Nginx
- 170624 逆向-失败的脱壳
- 有关mysql的乱码问题
- CentOS7 yum安装Tomcat并实现多域名与虚拟目录配置
- vsphere web client管理页面中文显示问题
- failed to load the JNI shared library 未能加载JNI的共享库
- 516. Longest Palindromic Subsequence