论坛首页 Java企业应用论坛

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

浏览 16878 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-25  
格局千秋啊.
0 请登录后投票
   发表时间:2008-07-25  
Saro 写道
楼主封装的不错。

@Controller
public class DemoController {

@RequestMapping("list_data.do")
public void list_data(Writer writer){
JSONObject obj = new JSONObject();
//........
writer.write(obj.toString());
}
}

其实这样也不麻烦。

 

writer直接输出JSON串,是否需要设置encoding,按照UTF-8编码后的输出在浏览器上是乱码,不知有何解决方法,当然每次输出前都设置encoding是个办法,但太麻烦了。

0 请登录后投票
   发表时间:2008-07-30  
stworthy 写道
Saro 写道
楼主封装的不错。

@Controller
public class DemoController {

@RequestMapping("list_data.do")
public void list_data(Writer writer){
JSONObject obj = new JSONObject();
//........
writer.write(obj.toString());
}
}

其实这样也不麻烦。

 

writer直接输出JSON串,是否需要设置encoding,按照UTF-8编码后的输出在浏览器上是乱码,不知有何解决方法,当然每次输出前都设置encoding是个办法,但太麻烦了。

 

用过滤器,spring有现成得。

0 请登录后投票
   发表时间:2008-07-30  
个人感觉ajax(js+xml)在action中或者controller中等控制其中处理,即使处理的在完美,终究还要占据一定的代码量.这些代码量包括xml文件的输出和xml节点的输出.楼主的方法很不错.(因为这个问题,我换成了dwr)
0 请登录后投票
   发表时间:2008-08-04  
可以基于这种方式任意扩展,现在我们在搞Flex,所以我也扩展了支持Flex HttpService的Controller。
0 请登录后投票
   发表时间:2008-08-04  

我们的做法:
spring2.5的Controller

 

@Controller
@RequestMapping("/agentAccount.do")
public class AgentAccountController extends AbstractController{
	@RequestMapping(params = "method=preValidate", method = RequestMethod.POST)
	public void preValidate(CrmAgentAccount agentAccount, BindingResult results, HttpServletResponse response)
			throws IOException
	{
		new AgentAccountValidator(agentAccount, results).validate();
		ajaxOutput(response, convert2JSONString(results.getAllErrors()));
	}
}

 

父类中的2个方法处理ajax输出:

	protected String convert2JSONString(Object object)
	{
		JSONArray jsonObject = JSONArray.fromObject(object);
		return jsonObject.toString();
	}
	protected void ajaxOutput(HttpServletResponse response, String outputString) throws IOException
	{
		response.setContentType("text/html; charset=GBK");
		response.getWriter().write(outputString);
		response.getWriter().flush();
	}

 

0 请登录后投票
   发表时间:2008-08-05  
觉得扩展写个JsonView,然后在控制器中直接返回这个JsonView,似乎更好些。
0 请登录后投票
   发表时间:2008-08-07  
stworthy 写道
谢谢,我现在知道怎么做了,大体有二种方法,一是定义一个json view,二是按照Saro说的方法。
另外,在处理控制映射上,是http://www.sf.net/index.do?method=testIt的形式好些,还是http://www.sf.net/index/testIt.do的形式好些。目前大家是使用那种形式多些?


其实不需要单独实现一个controller,而只需要定义一个JsonView class就可以,当然SourceForge里面好像有人已经提交了一个JsonView的实现,你可以拿过来用的"http://sourceforge.net/project/showfiles.php?group_id=171425&abmode=1".

在Controller里面代码和一般的Controller代码没什么区别:
	@RequestMapping("/login_ajax.do")
	public String handleAjaxLogin(Model model) {
		model.addAttribute(JsonFieldNaming.PARA_UNLOGIN, Boolean.TRUE);
		return "jsonView";
	}


View Config in views.properties:
jsonView.(class)=net.sf.json.spring.web.servlet.view.JsonView
jsonView.contentType=application/json;charset=UTF-8


0 请登录后投票
   发表时间:2008-08-07  
dakulaliu
的写法也不错。
我认为扩展出JSonController和JSonView的方法都是可以的,但JSonController这种方法不用在SPRINGMVC中加视图的配置了。
0 请登录后投票
   发表时间:2008-09-08  
我们这的方法是直接扩展view.controller只负责获得数据,具体是jsp还是ajax都让view去决定.这样controller的耦合度就更低了.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics