成功提交表单数据后如何重定向用户?

时间:2019-07-26 10:58:05

标签: java ajax spring

我有一个网站,您可以通过它创建捆绑包并向其中添加自定义或预定义的任务。

1]

一切正常,我可以随时更改所有这些字段。一旦所有这些字段都适合您,您必须单击“保存”按钮。单击它后,将通过多种方法来验证字段。如果所有字段均已成功验证,则Ajax将发布请求发送到我的Spring控制器,该控制器然后将所有内容存储到数据库中。之后,我想将用户重定向到显示所有现有捆绑软件的页面。

enter image description here

我已经尝试这样做:

@RequestMapping(value = "/bundle", method = RequestMethod.POST, consumes = {"application/octet-stream", "multipart/form-data"})
public void bundle(MultipartHttpServletRequest request,
                   HttpServletResponse response) throws IOException {

    // Code to store bundles to a database.

    // Redirect
    response.setHeader("Location", "http://localhost:8080/bundles");
    response.setStatus(302); //302 Found

    // I have also tried to replace above two statements with this
    response.sendRedirect("http://localhost:8080/bundles");
}

上面的代码确实执行,并且请求被发送到/ bundles

enter image description here

但是我似乎停留在初始页面上,没有进行重定向。

1 个答案:

答案 0 :(得分:1)

我和你有同样的问题。我通过使用Angular在前端中重定向来解决了这个问题。

您可以在javascript中使用HTTP请求中的答案,然后从那里重定向。

我的服务器端代码:

@PostMapping(AdminToolConstants.MAPPING_CHECK_USER)
    public ResponseEntity checkUser(HttpServletResponse response, @RequestBody UserDto userDto) throws IOException{
        if (userService.checkUser(userDto)) {
            return new ResponseEntity(HttpStatus.OK);
        } else {
            return new ResponseEntity(HttpStatus.BAD_REQUEST);
        }
     }

客户端javascript:

angular.module('admintool.services', []).factory('UserService', ["$http", "CONSTANTS", function($http, CONSTANTS) {
    var service = {};
    service.checkUser = function (userDto) {
        return $http.post(CONSTANTS.checkUser, userDto).then(function (value) {
                window.location.href = "/";
        }).catch(function (reason) { window.location.href = "/register" });
    };
    return service;
}]);

例如,登录成功时,在.then内部重定向用户,如果登录失败,则在.catch内部重定向用户。