【问题标题】:Spring MVC how to avoid reloading page after insert to a databaseSpring MVC如何避免在插入数据库后重新加载页面
【发布时间】:2018-07-16 08:21:34
【问题描述】:

我有一个使用文本输入进行输入的表单和一个用于将其添加到数据库表的控制器

@RequestMapping(value= "/stuff/add", method = RequestMethod.POST)
public String addStuff(@ModelAttribute("someForm") @Valid Stuff 
stuff,BindingResult bindingResult,Model model){

    //code for inserting to a database
    session.persist(stuff);
    return null;
}

我使用ajax调用这个函数如下:

$('#somebutton').click(function () {
e.stopPropagation();
$.ajax({
  type: 'post',
  url: '/stuff/add',
  data: $('form').serialize(),
  success: function () {
    alert(data);
  }
});
return null;
});

数据插入成功。但是,当控制器尝试重定向到 /stuff/add

时出现错误
HTTP Status 404 - /app/WEB-INF/views/stuff/add.jsp

我的 context.xml 有条目

    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />

我尝试将 addStuff 的返回类型更改为 void。但是,我收到了同样的错误消息。

如何在不重定向或刷新页面的情况下插入数据库?

【问题讨论】:

    标签: jquery ajax spring-mvc


    【解决方案1】:

    @ResponseBody注解放在你的方法之上,并将返回类型更改为ResponseEntity&lt;String&gt;

    @RequestMapping(value= "/stuff/add", method = RequestMethod.POST)
    @ResponseBody 
    public ResponseEntity<String> addStuff(@ModelAttribute("someForm") @Valid Stuff 
    stuff,BindingResult bindingResult,Model model){
    //code for insert
    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Type", "application/json; charset=utf-8");
    return new ResponseEntity<String>("{\"msg\":\"success\"}", headers, HttpStatus.OK);
    }
    

    并在此方法中返回一些字符串/布尔值,然后在 AJAX 成功函数中检查该字符串,并根据您决定使用重定向的响应

    success: function (data) {
        if(data.msg == "success"){
          window.location.href = "redirectURL";
        }
        alert(data);
      }
    

    【讨论】:

    • 我得到的值是真的印在碎石上,没有别的。另外,我相信重定向仍然在这里发生..
    • ResponseBody 将响应返回到调用环境,因此在您的情况下,它应该在 ajax 成功函数内返回,但它会返回到浏览器。找出原因?
    • 现在检查..我已经通过将返回类型更改为字符串并从控制器发送有效的 json 来编辑答案。
    猜你喜欢
    • 2021-11-07
    • 1970-01-01
    • 2020-12-25
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    相关资源
    最近更新 更多