第三次:jQuery (Ajax三級聯動)
阿新 • • 發佈:2018-12-11
1. jackson Jackson是一個簡單基於Java應用庫,Jackson可以輕鬆的將Java物件轉換成json物件和xml文件,同樣也可以將json、xml轉換成Java物件
核心程式碼: ObjectMapper mapper = new ObjectMapper(); mapper.writeValueAsString(obj); int count = md.getColumnCount(); map.put(md.getColumnName(i), rs.getObject(i));
2. jackson將java實體轉換為json字串
後臺三種json:
2.1 JavaBean/Map {}
2.2 陣列/List/Set []
2.3 類裡嵌類 混合模式
//json物件模式 Student stu1=new Student("s001", "張三"); ObjectMapper om=new ObjectMapper(); System.out.println(om.writeValueAsString(stu1)); //json陣列模式 Student stu2=new Student("s002", "李四"); List<Student> list1=new ArrayList<>(); list1.add(stu1); list1.add(stu2); System.out.println(om.writeValueAsString(list1)); //json混合模式 Map<String , Object> map=new HashMap<>(); map.put("count", 5); map.put("stu1", stu1); map.put("stu2", stu2); System.out.println(om.writeValueAsString(map));
map集合與JavaBean轉json字串有什麼區別:
結論:map集合與JavaBean轉json字串是一樣的。
Map<String, Object> map1=new HashMap<>(); map1.put("sid", "s001"); map1.put("sname", "張三"); ObjectMapper om=new ObjectMapper(); System.out.println(om.writeValueAsString(map1)); Map<String, Object> map2=new HashMap<>(); map2.put("sid", "s001"); map2.put("sname", "張三"); List<Map<String, Object>> list=new ArrayList<>(); list.add(map1); list.add(map2); System.out.println(om.writeValueAsString(list));
3. javaBean轉json字串死迴圈問題:java.lang.StackOverflowError(堆疊溢位錯誤)
處理方法: 1.忽略雙向關聯的一個方向即可,由雙向關聯改為單向關聯 2.實體類加 @JsonIgnore(程式控制)
Student stu1=new Student("s001", "張三");
Student stu2=new Student("s002", "李四");
Teacher tea1=new Teacher("t001", "曉哥", null);
Teacher tea2=new Teacher("t002", "袁哥", null);
Set<Teacher> tea=new HashSet<>();
tea.add(tea1);
tea.add(tea2);
stu1.setTeacher(tea);
Set<Student> stu=new HashSet<>();
stu.add(stu1);
stu.add(stu2);
tea1.setStudent(stu);
ObjectMapper om=new ObjectMapper();
System.out.println(om.writeValueAsString(tea1));
4.Ajax地址三級聯動
package com.zking.dao;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.zking.util.JsonBeanDao;
import com.zking.util.JsonUtils;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;
public class RegionDao extends JsonBeanDao{
/**
* Ajax 地址三級聯動
* @param paramMap
* @param pageBean 通用分頁
* @return
* @throws InstantiationException
* @throws IllegalAccessException
* @throws SQLException
*/
public List<Map<String , Object>> list(Map<String , String[]> paramMap,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
String id = JsonUtils.getParanVal(paramMap, "ID");
String sql = "select * from ch_region where true ";
//如果id為空就給它一個預設值,反之不為空就用就jsp頁面傳來的id
if(StringUtils.isBlank(id)) {
sql += " and parent_id=7459";
}else {
sql += " and parent_id="+id;
}
return super.executeQuery(sql, pageBean);
}
}
處理json資料工具包:
由於傳過來的是陣列,所以我們需要把他轉化成String字串
package com.zking.util;
import java.util.Arrays;
import java.util.Map;
/**
* 處理json資料工具包
* @author 10948
*
*/
public class JsonUtils {
/**
* 從paramMap拿到所需要用到的查詢維度,用於sql語句拼接
* @param paramMap 獲取從jsp頁面傳遞到後臺的引數集合
* @param key
* @return
*/
public static String getParanVal(Map<String , String []> paramMap,String key) {
if(paramMap !=null && paramMap.size()>0) {
String[] vals = paramMap.get(key);
if(vals!=null && vals.length>0) {
//將String陣列轉換成String字串
String val = Arrays.toString(vals);
return val.substring(1, val.length()-1);
}
return "";
}
return "";
}
}
jQuery.Ajax js
$(function() {
var ctx=$("#ctx").val();
$.ajax({
url:ctx+"/regionServlet",
success:function(data){
for(index in data){
$("#province").append("<option value='"+data[index].ID+"'>"+data[index].REGION_NAME+"</option>")
}
},
dataType:"json"
});
$("#province").change(function(){
$("option:gt(0)","#city").remove();
$("option:gt(0)","#county").remove();
$.ajax({
url:ctx+"/regionServlet?ID="+this.value,
success:function(data){
for(index in data){
$("#city").append("<option value='"+data[index].ID+"'>"+data[index].REGION_NAME+"</option>")
}
},
dataType:"json"
});
});
$("#city").change(function(){
$("option:gt(0)","#county").remove();
$.ajax({
url:ctx+"/regionServlet?ID="+this.value,
success:function(data){
for(index in data){
$("#county").append("<option value='"+data[index].ID+"'>"+data[index].REGION_NAME+"</option>")
}
},
dataType:"json"
});
});
})