两个方向:
一、前台至后台:
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中即可传向前台。
先给个工具类,用于前台显示:
public class ResponseUtil {
public static void write(HttpServletResponse response, Object o) throws Exception {
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.println(o.toString());
writer.flush();
writer.close();
}
}
ResponseUtil.java
Controller层方法,PageBean也是自己创建的实体类,是用来给sql语句的limit提供数据而已:
public class PageBean {
private int page;// 页数
private int rows;// 每页行数
private int start;// 起始页 public PageBean(int page, int rows) {
super();
this.page = page;
this.rows = rows;
} public int getPage() {
return page;
} public void setPage(int page) {
this.page = page;
} public int getRows() {
return rows;
} public void setRows(int rows) {
this.rows = rows;
} public int getStart() {
start = (page - 1) * rows;
return start;
} }
PageBean.java
@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继承该接口,定义新类是为了可以在类中添加我需要的时间格式
public class JavaDateObjectToJsonUtil implements JsonValueProcessor { private String format = null; public JavaDateObjectToJsonUtil(String format) {
super();
this.format = format;
} @Override
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
return null;
} @Override
public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
if (value == null) {
return "";
}
if (value instanceof Date) {
return new SimpleDateFormat(format).format((Date) value);
}
return value.toString();
} }
JavaDataObjectToJsonUtil.java
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);
}