扩展Spring MVC 用以支持Controller对Ajax的处理 pring Mvc中没有特别针对于Ajax请求的处理Controller.但是AbstractController和 SimpleFormController也是可以针对Ajax的请求给与相应的.但显得有一点点的不自然. Java代码 @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这种数据格式的两个原因是: 体积小可降低流量. Js端解码十分方便,Js对JSon格式数据有原生的支持. 使用Spring Mvc原有的SimpleFormController,从上边的例子上看是可以实现的,但是每次都要写"将JSonObject写入流,关流的代码.很累,很麻纺." 所以,扩展了两个新的Controller,以简化对Ajax请求的处理. JSONObjectAbstractController 用于简单的从request.getParamater参数的情况. JSONObjectAbstractController 的原代码: Java代码 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 的代码: Java代码 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); }
详细解决方案
扩张Spring MVC 用以支持Controller对Ajax的处理
热度:368 发布时间:2012-11-11 10:07:57.0
相关解决方案
- (Struts2+JSON+Ajax) XMLHttpRequest ==500如何解决
- 。各位大神,小弟有个简单的有关问题,就是小弟我用struts+ajax+juery+json时为何总是不进入action啊 配置文件如上
- Spring MVC开发模式,怎么取得新增的id
- spring 表单对象绑定有关问题 String与Long的转换
- spring+quartz定时器有关问题
- spring @Scope("prototype")注解更新有关问题,寻求帮助
- Spring MVC是不是可以完全取代Struts
- spring+quartz的错误,不能正常启动
- spring mvc +ibatis+db2连接数据库的配置如何写啊小弟我链接不下
- spring MVC cvc-complex-type.2.4.c解决方案
- Spring + Mybatis 组合报错
- Spring 中 packagesToScan有关问题
- ajax 多值 jsp 急
- Spring MVC中点击旋钮没反应
- spring aop这个跳转异常是咋回事
- spring security3的一个小疑点。加急
- spring 事务 aop transactionManager,该怎么解决
- ajax responsetext 替空值,想不通。
- Spring 事务管理,该怎么处理
- 关于 Spring 声明式事务管理!解决办法
- springmvc jquery ajax 提交复杂对象,415异常解决办法
- Struts2+Spring+JPA+FREEMARKER 登录程序异常
- 关于 Spring 宣言式事务管理!
- 求SSM分页 struts +spring+mybatis 给小弟我发个学习学习吧 多谢大神们
- jquery ajax select解决方法
- spring placeholderConfig的有关问题
- spring 事宜 aop transactionManager
- Spring 事务管理,该怎么解决
- struts2 + spring 整合有关问题
- struts+spring+mybatis出现错误(java.lang.ClassNotFoundException: Entity)为提示位置