GVKun编程网logo

从ajax Spring MVC控制器方法执行普通重定向

34

如果您对从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控制器方法执行普通重定向

我有一个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?

ajax – 如何使Spring MVC控制器使用UTF-8?

我正在使用jQuery AJAX将表单提交给支持的 Spring MVC控制器.我正在jsp上设置编码.在我的请求标题在Firebug我看到 –
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中运行.

有关如何设置正确的编码并防止垃圾字符提交的任何想法?

我找到了解决这个问题的办法.我已经将编码设置在每个jsp页面的顶部.然而,这不行.所以我在web.xml中添加了一个弹簧字符编码过滤器.这将确保请求中的编码正确.
<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 – 将Map传递给springMVC控制器

我试图从ajax发送HashMap或任何其他Map实现到 Spring MVC控制器

这是我如何做的细节:

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窗体?

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控制器临时存储中保存数据对象

asp.net-mvc – 暂时在MVC控制器,MVC,MVC控制器临时存储中保存数据对象

我有一个想要存放片刻的物体.对象现在在控制器中,控制器将生成一个视图.从视图到下一个控制器发出 AJAX请求.那一刻我需要先前存储的对象.以前,我使用会话,它运作良好.但不确定这是正确的做法.会话是这个的答案还是还有什么?

我也使用了缓存.但是根据缓存概念.它将访问所有用户.所以一个用户数据将覆盖到另一个.因此缓存的对象数据将为同一用户更改.我需要处理数据特定用户的存储空间(独立).

这怎么可能?请问其他方法请与我分享.

在Controller中我使用了Httpcontext.cache [“key”] = dataset;

但有人建议这样.但它没有显示

说明:

在Controller中:httpcontext.current.cache没有到来.

只有HttpContext.Currenthandler和HttpContext.Currentnotification属性.所以我们如何处理MVC中的临时数据存储.

请帮我.

解决方法

如果要仅为下一个请求存储数据,可以使用TempData.如果数据应在多个请求之间可访问,则使用Session. Here是每个例子的简短说明.

今天的关于从ajax Spring MVC控制器方法执行普通重定向的分享已经结束,谢谢您的关注,如果想了解更多关于ajax – 如何使Spring MVC控制器使用UTF-8?、ajax – 将Map传递给springMVC控制器、asp.net-mvc – 我必须做什么才能从MVC控制器重定向到Web窗体?、asp.net-mvc – 暂时在MVC控制器,MVC,MVC控制器临时存储中保存数据对象的相关知识,请在本站进行查询。

本文标签: