在写controller的时候,有时候方法没有返回值,但是却可以向前台传递数据,即返回值类型为void如下代码:
@RequestMapping(params = "datagrid")
@ResponseBody
public void datagrid(){
response.setContentType("text/text"); //设置请求以及响应的内容类型以及编码方式
response.setCharacterEncoding("UTF-8");
JSONArray json = JSONArray.fromObject(textTemplate); //转换
String str = json.toString(); //将json对象转换为字符串
response.getWriter.write(str); //将str字符传输到前台
}
或者我的项目中出现的如下,
/**
* 查询信息列表
* @param textTemplate
* @param request
* @param response
* @param dataGrid
*/
@RequestMapping(params = "datagrid")
@ResponseBody
public void datagrid(TextTemplate textTemplate, HttpServletRequest request,
HttpServletResponse response, DataGrid dataGrid) {
CriteriaQuery cq = new CriteriaQuery(TextTemplate.class, dataGrid);
cq.eq("accountId", ResourceUtil.getWeiXinAccountId());
String templateName = request.getParameter("templateName");
if(StringUtil.isNotEmpty(templateName)){
cq.like("templateName", templateName);
}
cq.add();
this.textTemplateService.getDataGridReturn(cq, true);
TagUtil.datagrid(response, dataGrid);
}
其实它们只是没有使用return语句返回数据,这些方法使用的是将输出流写出的方式传递数据给前台,使用到了HttpServletResponse 对象,通过三个步骤:
1.通过response获得写方法
PrintWriter pw=response.getWriter();
2.通过写方法写出数据
pw.write(object.toString());
3. flush() 将数据刷出
pw.flush();
,传递数据如上面展示的代码,是实现一个查询信息的功能,只需要将条件查询出来的列表传递给前台就可以了,方法的最后两句代码,好像没有见过,其实只是封装了一下以上的这个写出方法,点近TagUtil方法查看下,果然:
/**
* 控件类型:easyui
* 返回datagrid JSON数据
* @param response
* @param dataGrid
*/
public static void datagrid(HttpServletResponse response,DataGrid dg) {
response.setContentType("application/json");
//response.setHeader("Cache-Control", "no-store");
JSONObject object = TagUtil.getJson(dg);
try {
PrintWriter pw=response.getWriter();
pw.write(object.toString());
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
,这种传数据方式一般用在,后台向前台传值和项目间传数据时候使用较多。