兩個方向:
一、前台至后台:
Spring可以自動封裝Bean,也就是說可以前台通過SpringMVC傳遞過來的屬性值會自動對應到對象中的屬性並封裝成javaBean,但是只能是基本數據類型(int,String等)。如果傳遞過來的是特殊對象,則需要手動進行封裝。
Spring提供了@initBinder(初始化綁定封裝)注解和WebDataBinder工具。用戶只需要向WebDataBinder注冊自己需要的類型的屬性編輯器即可。
/* 前台傳遞過來的String類型時間,通過下面的初始化綁定,轉換成Date類型 */ @initBinder public void initBinder(WebDataBinder binder){ SimpleDateFormate sdf=new SimpleDateFormate("yyyy-MM-dd HH:mm"); binder.registerCustomEditor(Date.class,new CustomDateEditor(sdf,true));//true表示允許空值,false不允許 }
更多詳細內容轉載鏈接
1,http://blog.csdn.net/hongxingxiaonan/article/details/50282001(前台傳遞過來非Date類型,及WebDataBinder的其它方法)
2,http://www.cnblogs.com/AloneSword/p/3998943.html(前台傳遞過來兩個不同名和不同格式的Date類型)
二、后台到前台:
1,可以直接在后台將值存入session或request或page中,后台就可以直接通過EL表達式¥{key.value}取值
2,主要記錄后台將List<javaBean>值存入json中,前台如何取值及轉換。
我寫的項目前台運用的是easyui-datagrid顯示值
(1),前台封裝的值不包含特殊類型,如java.util.Date
easyui前台顯示數據可以使用JSONObject,也可以使用JSONArray。但是如果需要在datagrid表格中進行數據顯示,只能使用JSONObject,這是easyui的規范。
一般后台會將查詢出的List使用JSONArray.fromObject()方法將List轉換成JSONArray,但如果是在datagrid的表格中顯示,則需要將JSONArray put到JSONobject中;如果不用在datagrid表格中顯示,那么JSONObject和JSONArray都可以傳遞給前台值。
如combobox,后台只需要將List放入JSONArray中即可傳向前台。
先給個工具類,用於前台顯示:
1 public class ResponseUtil { 2 public static void write(HttpServletResponse response, Object o) throws Exception { 3 response.setContentType("text/html;charset=utf-8"); 4 PrintWriter writer = response.getWriter(); 5 writer.println(o.toString()); 6 writer.flush(); 7 writer.close(); 8 } 9 }
Controller層方法,PageBean也是自己創建的實體類,是用來給sql語句的limit提供數據而已:
1 public class PageBean { 2 private int page;// 頁數 3 private int rows;// 每頁行數 4 private int start;// 起始頁 5 6 public PageBean(int page, int rows) { 7 super(); 8 this.page = page; 9 this.rows = rows; 10 } 11 12 public int getPage() { 13 return page; 14 } 15 16 public void setPage(int page) { 17 this.page = page; 18 } 19 20 public int getRows() { 21 return rows; 22 } 23 24 public void setRows(int rows) { 25 this.rows = rows; 26 } 27 28 public int getStart() { 29 start = (page - 1) * rows; 30 return start; 31 } 32 33 }
@RequestMapping("/getProductList") public void getProductList(@RequestParam(value = "page", required = false) String page,@RequestParam(value = "rows") String rows, HttpServletResponse response, Product product) throws Exception { PageBean pageBean = new PageBean(Integer.parseInt(page), Integer.parseInt(rows)); Map<String, Object> map = new HashMap<>(); map.put("start", pageBean.getStart()); map.put("size", pageBean.getRows()); map.put("productName", product.getProductName()); List<Product> productList = productService.getProductList(map); int total = productService.getTotal(map); JSONObject jsonObject = new JSONObject(); JSONArray jsonArray = JSONArray.fromObject(productList);//將查詢出的List先轉換成JSONArray jsonObject.put("rows", jsonArray); jsonObject.put("total", total); ResponseUtil.write(response, jsonObject); }
(2),前台封裝的值包含如java.util.Date的特殊類型
用Json-lib日期處理:將后台的傳遞的時間類型轉換成前台可以顯示的Json格式,用類JsonConfig和接口JsonValueProcessor處理,用法也很簡單:
源碼JsonValueProcessor接口中只包含兩個方法,我定義一個類JavaDateObjectToJsonUtil繼承該接口,定義新類是為了可以在類中添加我需要的時間格式
1 public class JavaDateObjectToJsonUtil implements JsonValueProcessor { 2 3 private String format = null; 4 5 public JavaDateObjectToJsonUtil(String format) { 6 super(); 7 this.format = format; 8 } 9 10 @Override 11 public Object processArrayValue(Object value, JsonConfig jsonConfig) { 12 return null; 13 } 14 15 @Override 16 public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { 17 if (value == null) { 18 return ""; 19 } 20 if (value instanceof Date) { 21 return new SimpleDateFormat(format).format((Date) value); 22 } 23 return value.toString(); 24 } 25 26 }
Controller層方法,實體類SaleChance類中包含有屬性java.util.Date createTime;並且有createTime的get/set方法:
@RequestMapping("/getSaleChanceList") public void getSaleChanceList(@RequestParam(value = "page", required = false) String page,@RequestParam(value = "rows") String rows, HttpServletResponse response, SaleChance saleChance)throws Exception { PageBean pageBean = new PageBean(Integer.parseInt(page), Integer.parseInt(rows)); Map<String, Object> map = new HashMap<>(); map.put("start", pageBean.getStart()); map.put("size", pageBean.getRows()); map.put("createMan", saleChance.getCreateMan()); List<SaleChance> saleChanceList = saleChanceService.getSaleChanceList(map); int total = saleChanceService.getTotal(map); JSONObject jsonObject = new JSONObject(); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JavaDateObjectToJsonUtil("yyyy:MM:dd hh:mm"));//只需將時間類型和新類通過JsonConfig注冊即可 JSONArray jsonArray = JSONArray.fromObject(saleChanceList, jsonConfig);//轉換成JSONArray時多帶上剛注冊的JsonConfig jsonObject.put("rows", jsonArray); jsonObject.put("total", total); ResponseUtil.write(response, jsonObject);
}
