六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 47|回复: 0

扩展Spring MVC 用以支持Controller对Ajax的处理

[复制链接]

升级  2%

13

主题

13

主题

13

主题

秀才

Rank: 2

积分
53
 楼主| 发表于 2013-1-23 02:27:28 | 显示全部楼层 |阅读模式
pring Mvc中没有特别针对于Ajax请求的处理Controller.但是AbstractController和    
SimpleFormController也是可以针对Ajax的请求给与相应的.但显得有一点点的不自然. 

@Override     protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,              BindException ex) {          String userId=request.getParamater("userId");                       Map userInfoMap=userDao.getUserBaseInfo(userId);                       JSONObject object = new JSONObject();                       object.put("userInfoMap",userInfoMap);          response.setContentType("text/Xml;charset=gbk");          PrintWriter out = null;          try {              out = response.getWriter();                   out.println(object.toString());                             }          catch (IOException ex1) {              ex1.printStackTrace();          }finally{                                 out.close();                        }          return null;      }  
@Override          protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,                           BindException ex) {                   String userId=request.getParamater("userId");                     Map userInfoMap=userDao.getUserBaseInfo(userId);                     JSONObject object = new JSONObject();                     object.put("userInfoMap",userInfoMap);                   response.setContentType("text/Xml;charset=gbk");                   PrintWriter out = null;                   try {                           out = response.getWriter();                            out.println(object.toString());                                               }                   catch (IOException ex1) {                           ex1.printStackTrace();                   }finally{                               out.close();                      }                   return null;           }    
说明一下我向客户端页面response的是一个JSon对象,选择JSon这种数据格式的两个原因是:    
1.体积小可降低流量.    
 2.Js端解码十分方便,Js对JSon格式数据有原生的支持.     
 
使用Spring Mvc原有的SimpleFormController,从上边的例子上看是可以实现的,但是每次都要写"将JSonObject写入流,关流的代码.很累,很麻烦."   
所以,扩展了两个新的Controller,以简化对Ajax请求的处理.    
JSONObjectAbstractController 用于简单的从request.getParamater参数的情况.    
JSONObjectAbstractController 的原代码:    
 
package com.javaest.ext.spring.mvc.controller;           import java.io.IOException;      import java.io.PrintWriter;           import javax.servlet.http.HttpServletRequest;      import javax.servlet.http.HttpServletResponse;           import net.sf.json.JSONObject;           import org.springframework.web.servlet.ModelAndView;      import org.springframework.web.servlet.mvc.AbstractController;           public abstract class JSONObjectAbstractController extends AbstractController {               @Override         protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)                  throws Exception {              JSONObject jsonObject = handleAjaxRequestInternal(request, response);              response.setContentType("text/Xml;charset=gbk");              PrintWriter out = null;              try {                  out = response.getWriter();                  out.println(jsonObject.toString());              }              catch (IOException ex1) {                  ex1.printStackTrace();              }              finally {                  out.close();              }                   return null;          }               protected abstract JSONObject handleAjaxRequestInternal(HttpServletRequest httpServletRequest,                  HttpServletResponse httpServletResponse) throws Exception;           }     
 
package com.javaest.ext.spring.mvc.controller;     import java.io.IOException;   import java.io.PrintWriter;     import javax.servlet.http.HttpServletRequest;   import javax.servlet.http.HttpServletResponse;     import net.sf.json.JSONObject;     import org.springframework.web.servlet.ModelAndView;   import org.springframework.web.servlet.mvc.AbstractController;     public abstract class JSONObjectAbstractController extends AbstractController {             @Override          protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)                           throws Exception {                   JSONObject jsonObject = handleAjaxRequestInternal(request, response);                   response.setContentType("text/Xml;charset=gbk");                   PrintWriter out = null;                   try {                           out = response.getWriter();                           out.println(jsonObject.toString());                   }                   catch (IOException ex1) {                           ex1.printStackTrace();                   }                   finally {                           out.close();                   }                     return null;           }             protected abstract JSONObject handleAjaxRequestInternal(HttpServletRequest httpServletRequest,                           HttpServletResponse httpServletResponse) throws Exception;     }  
JSONObjectSimpleFormController 用于自动将请求参数绑定到Command对象的情况.    
JSONObjectSimpleFormController 的代码:    
package com.javaest.ext.spring.mvc.controller;           import java.io.IOException;      import java.io.PrintWriter;           import javax.servlet.http.HttpServletRequest;      import javax.servlet.http.HttpServletResponse;           import net.sf.json.JSONObject;           import org.springframework.validation.BindException;      import org.springframework.web.servlet.ModelAndView;      import org.springframework.web.servlet.mvc.SimpleFormController;           public abstract class JSONObjectSimpleFormController extends SimpleFormController {               @Override         protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,                  BindException ex) {              JSONObject object = onAjaxSubmit(request, response, cmd, ex);                   response.setContentType("text/Xml;charset=gbk");              PrintWriter out = null;              try {                  out = response.getWriter();                  out.println(object.toString());              }              catch (IOException ex1) {                  ex1.printStackTrace();              }              finally {                  out.close();              }                   return null;          }               public abstract JSONObject onAjaxSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,                  BindException ex);           } 
package com.javaest.ext.spring.mvc.controller;     import java.io.IOException;   import java.io.PrintWriter;     import javax.servlet.http.HttpServletRequest;   import javax.servlet.http.HttpServletResponse;     import net.sf.json.JSONObject;     import org.springframework.validation.BindException;   import org.springframework.web.servlet.ModelAndView;   import org.springframework.web.servlet.mvc.SimpleFormController;     public abstract class JSONObjectSimpleFormController extends SimpleFormController {             @Override          protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,                           BindException ex) {                   JSONObject object = onAjaxSubmit(request, response, cmd, ex);                     response.setContentType("text/Xml;charset=gbk");                   PrintWriter out = null;                   try {                           out = response.getWriter();                           out.println(object.toString());                   }                   catch (IOException ex1) {                           ex1.printStackTrace();                   }                   finally {                           out.close();                   }                     return null;           }             public abstract JSONObject onAjaxSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd,                           BindException ex);     }   

 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表