扩展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
相关解决方案
- 。各位大神,小弟有个简单的有关问题,就是小弟我用struts+ajax+juery+json时为何总是不进入action啊 配置文件如上
- Spring MVC开发模式,怎么取得新增的id
- spring 表单对象绑定有关问题 String与Long的转换
- spring+quartz定时器有关问题
- spring @Scope("prototype")注解更新有关问题,寻求帮助
- Spring MVC是不是可以完全取代Struts
- spring+quartz的错误,不能正常启动
- Spring 中 packagesToScan有关问题
- ajax 多值 jsp 急
- Spring MVC中点击旋钮没反应
- spring 事务 aop transactionManager,该怎么解决
- ajax responsetext 替空值,想不通。
- springmvc jquery ajax 提交复杂对象,415异常解决办法
- Struts2+Spring+JPA+FREEMARKER 登录程序异常
- 求SSM分页 struts +spring+mybatis 给小弟我发个学习学习吧 多谢大神们
- jquery ajax select解决方法
- spring placeholderConfig的有关问题
- spring 事宜 aop transactionManager
- Spring 和 hibernate如何配置事物
- hibernate与此同时使用多数据源?spring+hibernate
- Spring 动态代理,该怎么解决
- ajax Post 一直返回的是error ,为啥
- java spring mvc,该怎么解决
- spring mvc 接收对象数组解决办法
- Spring Data 的有关问题
- spring mvc3 使用jackson返回json时候无限循环
- struts+spring+hibernate 开发,在action层调用service层接口,结果替null 注入失败,需高手帮忙
- 生手求教,dwr+struts+spring 页面跳提示框error
- servlet+jquery1.4.2(ajax error?)解决方案
- spring IOC 原理解决方法