问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

jquery ajax json java后台怎么处理

发布网友 发布时间:2022-05-15 06:09

我来回答

2个回答

懂视网 时间:2022-05-15 10:30

这次给大家带来使用Ajax时Json-lib如何处理,使用Ajax时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()); 
 }
}

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

用history让ajax支持前进/后退/刷新

Ajax方法实现Form表单提交的方法

热心网友 时间:2022-05-15 07:38

一、$.ajax的一般格式

[javascript] view plain copy
$.ajax({

type: 'POST',

url: url ,

data: data ,

success: success ,

dataType: dataType

});

二、$.ajax的参数描述
参数 描述
url 必需。规定把请求发送到哪个 URL。
data 可选。映射或字符串值。规定连同请求发送到服务器的数据。
success(data, textStatus, jqXHR) 可选。请求成功时执行的回调函数。
dataType

可选。规定预期的服务器响应的数据类型。

默认执行智能判断(xml、json、script 或 html)。

[javascript] view plain copy
//1.$.ajax带json数据的异步请求
var aj = $.ajax( {
url:'proctManager_reverseUpdate',// 跳转到 action
data:{
selRollBack : selRollBack,
selOperatorsCode : selOperatorsCode,
PROVINCECODE : PROVINCECODE,
pass2 : pass2
},
type:'post',
cache:false,
dataType:'json',
success:function(data) {
if(data.msg =="true" ){
// view("修改成功!");
alert("修改成功!");
window.location.reload();
}else{
view(data.msg);
}
},
error : function() {
// view("异常!");
alert("异常!");
}
});

//2.$.ajax序列化表格内容为字符串的异步请求

[javascript] view plain copy
function noTips(){
var formParam = $("#form1").serialize();//序列化表格内容为字符串
$.ajax({
type:'post',
url:'Notice_noTipsNotice',
data:formParam,
cache:false,
dataType:'json',
success:function(data){
}
});
}

//3.$.ajax拼接url的异步请求

[javascript] view plain copy
var yz=$.ajax({
type:'post',
url:'validatePwd2_checkPwd2?password2='+password2,
data:{},
cache:false,
dataType:'json',
success:function(data){
if( data.msg =="false" ) //服务器返回false,就将validatePassword2的值改为pwd2Error,这是异步,需要考虑返回时间
{
textPassword2.html("<font color='red'>业务密码不正确!</font>");
$("#validatePassword2").val("pwd2Error");
checkPassword2 = false;
return;
}
},
error:function(){}
});

//4.$.ajax拼接data的异步请求

[javascript] view plain copy
$.ajax({
url:'${basePath }/jobs/Dictionary/post',
type:'post',
data:'merName='+values,
async : false, //默认为true 异步
error:function(){
alert('error');
},
success:function(data){
//后台传过来的是list<Map> 或者是list<Object>
var jsonObj=eval("("+data+")");
$.each(jsonObj, function (i, item) {
//$("#taskClass").append("<option value='"+item.+"."+item.fieldName+"'>"+item.statuDesc+"</option>");
alert(item.value + "," + item.desc);
});
$("#"+divs).html(data);
}
});

后台action

JSON-lib这个Java类包用于把bean,map和XML转换成JSON并能够把JSON转回成bean和DynaBean。

下载地址:http://json-lib.sourceforge.net/
还要需要的第3方包:
org.apache.commons(3.2以上版本)
org.apache.oro
net.sf.ezmorph(ezmorph-1.0.4.jar)
nu.xom

[java] view plain copy
@RequestMapping(value="post")
public void post(HttpServletRequest request,HttpServletResponse response){
List<Map<String,String>> listMap = new ArrayList<Map<String,String>>();
for (int i = 0; i < 6; i++) {
Map<String,String> map = new HashMap<String,String>();
map.put("value", "id"+i);
map.put("desc", i+"");
listMap.add(map);
}
System.out.println(JSONArray.fromObject(listMap).toString());
StringUtil.write(response, JSONArray.fromObject(listMap).toString());

}

public static void write(HttpServletResponse response,String message){
try {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
response.getWriter().write(message);
response.getWriter().flush();
} catch (IOException e) {
e.printStackTrace();
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
联想Z470AM I5处理器与I3 联想ideapad z470 独显默认设置是什么 联想Z470 I5处理器 GT520M的显卡跟普通的GT520M显卡有什么区别 性能怎 ... 我新买了一台联想z470 i3-2310 但是朋友说显卡不太好!! 我玩天龙八部... 联想的z470笔记本 上面 的独显GT520M 能不能 更换 或者是升级阿? ...我的是双显卡的 z470- i5 显卡是 gt520m 能换吗 vivo手机耳机麦克风说话声音小 耳机通话声音小是怎么回事 为什么我手机耳机的麦克风声音很小怎么调 求:7个字的情侣游戏名,纯汉字,有诗意的(不要古诗)。不带任何符号或英文... 我的苹果手机进去APP 商店 下载不到QQ 为啥啊 紫薇的硬枝扦插技术 紫薇扦插技术 紫薇花什么时候扦插方法和时间 紫薇可以扦插吗扦插 紫薇是怎样繁殖的? 紫薇盆景要怎样扦插繁殖? 紫薇怎样繁殖? 紫薇要怎样扦插繁殖? 怎样繁殖紫薇? 紫薇花如何扦插? xp耳机有声音音响没声音怎么回事 在家怎么制作双皮奶,要简单点的 谢谢~ 襄阳圣观古镇有什么特色好吃 双皮奶怎样制作? 几分钟网-如何制作双皮奶 浮生为卿歌正七卿怎么能过 汽车销量跌入谷底!2月上旬同比下滑92%,全年靠政策救市 2016佛山市在岗职工平均工资是多少请问 世界上超过50万的人口的城市,中国占6个,是哪6个? 谁知道电动车电池,旭派电池好不好 数据线接头可以换吗 有哪些好用的图片查看器值得推荐 50岁时中年女人送什么礼物 有没有简单好用的GIF图片查看器 【麻烦介绍一个好用简单的图片查看器】 请问哪位可以提供一种比较好用的图片传真查看器? Ajax请求时,如何解释json数据 华硕9600gt 孔距 求助!!耕升9600 GSO 512(256MB)电脑显卡配个什么型号的散热器比较好! 七彩虹9600GT显卡风扇噪音大,怎么解决? 9600GT到底是什么接口的显卡 关于讯景XFX讯景9800GT(PV-T98G-YDL)孔距的问题! 9600gt显卡详细参数 nVIDIA GeForce 9600GT 与 nVIDIA GeForce GT330M 的详细参数比较 9600GT 刀锋 显卡 影驰9600GT需要插上独立供电接口吗? 激发学生兴趣的重要性 对于学生来说,兴趣究竟有多重要? 学习兴趣对于学习的作用很重要吗? 小学生是发展兴趣比较重要,还是强化学业比较重要?