【问题标题】:Changing pages spring boot application更改页面 Spring Boot 应用程序
【发布时间】:2020-08-30 09:56:58
【问题描述】:

我在更改页面时遇到问题。所以我拥有的是一个按钮,当该用户按下该按钮时,就会调用一个 ajax Post。这里是例子:

 $.ajax({
        contentType: "application/json",
        type: "POST",
        data: JSON.stringify(project),
        url: "/saveProject",
        success: function (data) {
            console.log('done');
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log('error while post');
        }
    });

@RequestMapping(value = "/saveProject", method = RequestMethod.POST)
public @ResponseBody
String saveProject(@RequestBody Project newProject, Authentication authentication) {
    projectService.saveProjectNew(newProject, authentication);

    return "mywork.html";

}

所以最后我想从我当前所在的页面重定向到 mywork.html。但是什么也没发生,我留在同一页面上。我可能错过了一些我不知道的东西。对此很陌生。

【问题讨论】:

  • 这与Spring无关;您正在混合 AJAX 和传统的 HTML 表单发布。了解差异。

标签: javascript java ajax spring spring-mvc


【解决方案1】:

可以从您发布的后端以及前端 ajax 代码触发 Http 重定向。

要从 ui 进行重定向,您可以像@Anurag 在他对 ajax 成功回调的回答中指出的那样添加窗口重定向。

但在您的示例中,您试图将用户从后端端点本身重定向到新页面。因此,如果您已经有一个控制器返回映射 /mywork.html 的视图,以便重定向从 spring 后端工作,您需要执行以下操作:

@RequestMapping(value = "/saveProject", method = RequestMethod.POST)
public String saveProject(@RequestBody Project newProject, Authentication authentication) {
    projectService.saveProjectNew(newProject, authentication);
    return "redirect:/mywork.html";

}

或使用ResponseEntity 喜欢:

HttpHeaders headers = new HttpHeaders();
headers.setLocation(URI.create(newUrl));
return new ResponseEntity<>(headers, HttpStatus.MOVED_PERMANENTLY);

在您的代码中,您使用注释 @ResponseBody 作为控制器方法,这基本上使端点成为默认情况下返回 json 的休息端点。因此,要使重定向工作,请删除注释并使其成为正常的控制器方法返回视图。

如果您想从休息端点重定向,请使用HttpServletResponse,例如:

@RequestMapping(value = "/saveProject", method = RequestMethod.POST)
public @ResponseBody String saveProject(@RequestBody Project newProject, Authentication authentication, HttpServletResponse response) {
    projectService.saveProjectNew(newProject, authentication);
    response.sendRedirect("url-here");   
}

欲了解更多信息Link

【讨论】:

    【解决方案2】:

    将页面重定向到 mywork.html 一旦获得 Ajax 调用的响应,您就需要编写代码 所以在Ajax的成功功能下应该使用

    windows.location.href = "Your context path"+"/mywork.html";
    

    请参考以下参考代码:

    $.ajax({
        contentType: "application/json",
        type: "POST",
        data: JSON.stringify(project),
        url: "/saveProject",
        success: function (data) {
            windows.location.href = "Your context path"+"/mywork.html";
    
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log('error while post');
        }
    });
    

    这里的spring web客户端代码不会将调用转移到mywork.html。

    所有呼叫将仅通过 Ajax 呼叫转移。

    return "mywork.html";
    

    此代码仅用于对调用端点后检索到的响应进行建模。

    【讨论】:

      猜你喜欢
      • 2019-08-07
      • 2014-11-21
      • 2016-02-11
      • 2015-07-25
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 2019-03-03
      相关资源
      最近更新 更多