如果您对从ajaxSpringMVC控制器方法执行普通重定向感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于从ajaxSpringMVC控制器方法执行普通重定向的详细内容,并
如果您对从ajax Spring MVC控制器方法执行普通重定向感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于从ajax Spring MVC控制器方法执行普通重定向的详细内容,并且为您提供关于ajax – 如何使Spring MVC控制器使用UTF-8?、ajax – 将Map传递给springMVC控制器、asp.net-mvc – 我必须做什么才能从MVC控制器重定向到Web窗体?、asp.net-mvc – 暂时在MVC控制器,MVC,MVC控制器临时存储中保存数据对象的有价值信息。
本文目录一览:- 从ajax Spring MVC控制器方法执行普通重定向
- ajax – 如何使Spring MVC控制器使用UTF-8?
- ajax – 将Map传递给springMVC控制器
- asp.net-mvc – 我必须做什么才能从MVC控制器重定向到Web窗体?
- asp.net-mvc – 暂时在MVC控制器,MVC,MVC控制器临时存储中保存数据对象
从ajax Spring MVC控制器方法执行普通重定向
我有一个Spring MVC控制器方法。
我希望此方法能够:
- 如果存在验证错误,则返回JSon @ResponseBody(在ajax中)
- 如果没有验证错误,请执行到指定URL的普通重定向
假设我有一个名为myObject的javabean对象,我尝试了以下操作:
@RequestMapping(value = "/new", method = RequestMethod.POST)@ResponseBodypublic MyJavabeanObject myMethod(@RequestBody MyJavabeanObject myObject, BindingResult bindingResult, Model model, RedirectAttributes redirectAttributes, HttpServletResponse response) throws IOException { if (bindingResult.hasErrors()) { //adding error message to javabean return myObject; } response.sendRedirect("/success"); return null;}
谁能告诉我我要实现的目标是否完全可能?
答案1
小编典典您所拥有的将按照您的描述进行工作。您的方法带有注释@ResponseBody
。因此,将分派特定的HandlerMethodReturnValueHandler
,,RequestResponseBodyMethodProcessor
处理返回的对象并将其写入响应。
相反,如果您没有收到错误,则直接发送自己的重定向并返回null
。当处理程序方法的返回值为时null
,Spring会DispatcherServlet
假定您自己处理生成响应。
您唯一需要担心的是AJAX处理程序如何期望响应。在一种情况下,它将获取JSON,在另一种情况下,它将获取任何/success
回报。
注意:如果您希望重定向从AJAX请求重定向整个浏览器页面,则此操作将无效。
您将需要在AJAX处理程序中有一个特殊情况,该特殊情况将通过设置window.location
或相关内容来更改浏览器页面。
ajax – 如何使Spring MVC控制器使用UTF-8?
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 115 Connection keep-alive Content-Type application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With XMLHttpRequest
然而,在我的Spring MVC控制器中,所有在西里尔文中输入的表单值都变成垃圾.而对于这一点,这种做法在Safari中可以正常工作,但不能在IE / FF / Chrome中运行.
有关如何设置正确的编码并防止垃圾字符提交的任何想法?
<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
ajax – 将Map传递给springMVC控制器
这是我如何做的细节:
Ajax调用如下
var tags = {}; tags["foo"] = "bar"; tags["whee"] = "whizzz"; $.post("doTestMap.do",{"tags" : tags },function(data,textStatus,jqXHR) { if (textStatus == 'success') { //handle success console.log("doTest returned " + data); } else { console.err("doTest returned " + data); } });
然后在控制器方面我有:
@RequestMapping(value="/publisher/doTestMap.do",method=RequestMethod.POST) public @ResponseBody String doTestMap(@RequestParam(value = "tags",defaultValue = "") HashMap<String,String> tags,HttpServletRequest request) { // System.out.println(tags); return "cool"; }
不幸的是我系统地得到了
org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type 'java.lang.String' to required type 'java.util.Map'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.Map]: no matching editors or conversion strategy found
我究竟做错了什么 ?
谢谢.
但有一点要记住:
> Spring使用命令对象作为顶级值持有者.命令对象可以是任何类.
所以你需要的是一个包装类(TagsWrapper),它包含一个Map< String,String>类型的字段.叫做标签.
绑定数组的方法相同.
这在文档中得到了很好的解释,但我偶尔忘记了包装器对象的需要;)
您需要更改的第二件事是提交标记值的方式:
>每个地图键使用一个表单参数,而不是完整映射的完整字符串表示.
>一个输入值应如下所示:
<input type="text" name="tags[key]" value="something">
如果标签是包装器中的映射,则这样就可以开箱即用于表单提交.
asp.net-mvc – 我必须做什么才能从MVC控制器重定向到Web窗体?
Response.Redirect("~/WebForms/ReportViewer.aspx");
那么这个简单的测试代码在Page_Load的“ReportViewer.aspx”中:
protected void Page_Load(object sender,EventArgs e) { Response.Write("Hello"); return; }
此代码甚至不执行,即Page_Load不执行.我想在重定向到Web表单之前我应该做些什么,但不知道它是什么.我已经看到了很多示例代码,只是简单地调用了Redirect.
我的网页表单上有一个Crystal Reports查看器,可能与情况有关:
<body> <form id="form" runat="server"> <CR:CrystalReportViewer ID="CrystalViewer" runat="server" AutoDataBind="true" /> </form> </body>
解决方法
return Redirect("~/Webform.aspx");
是完美的,其返回类型是RedirectResult,它工作得很棒,我测试过它.
我的行动看起来像这样
public ActionResult Print() { return Redirect("~/Webform2.aspx"); }
感谢@Andrey Gubal
asp.net-mvc – 暂时在MVC控制器,MVC,MVC控制器临时存储中保存数据对象
我也使用了缓存.但是根据缓存概念.它将访问所有用户.所以一个用户数据将覆盖到另一个.因此缓存的对象数据将为同一用户更改.我需要处理数据特定用户的存储空间(独立).
这怎么可能?请问其他方法请与我分享.
在Controller中我使用了Httpcontext.cache [“key”] = dataset;
但有人建议这样.但它没有显示
说明:
在Controller中:httpcontext.current.cache没有到来.
只有HttpContext.Currenthandler和HttpContext.Currentnotification属性.所以我们如何处理MVC中的临时数据存储.
请帮我.
解决方法
今天的关于从ajax Spring MVC控制器方法执行普通重定向的分享已经结束,谢谢您的关注,如果想了解更多关于ajax – 如何使Spring MVC控制器使用UTF-8?、ajax – 将Map传递给springMVC控制器、asp.net-mvc – 我必须做什么才能从MVC控制器重定向到Web窗体?、asp.net-mvc – 暂时在MVC控制器,MVC,MVC控制器临时存储中保存数据对象的相关知识,请在本站进行查询。
本文标签: