0

我正在从另一个控制器(分别说控制器 1 和控制器 2)调用一个控制器的视图。它可以成功运行,但是即使我重定向到控制器 2,浏览器也会显示控制器 1 的 url。如何改变这个?

@Controller

@SessionAttributes

public class UserFormController {

@Autowired
private UserService userService;

@Autowired
private Controller2 controller2;

@RequestMapping(value = "/method1", method = RequestMethod.GET)
public ModelAndView redirectFormPage() {

 return controller2.redirectMethod();

}

在这里,显示了 url “method1”。我想显示被调用的 url。

4

2 回答 2

0

controller2.redirectMethod() 有什么作用?

而不是直接从控制器调用方法,而是使用它并将 URL 放入 redirectMethod (redirectURL)

   return new ModelAndView("redirect:/redirectURL");

或者

   return "redirect:/redirectURL"

取决于你返回什么

在您的情况下,它将被视为正常方法。

控制器 1:

@Controller
@RequestMapping("/")
public class Controller11 {     
    @RequestMapping("/method1")
    public String method1(Model model) {
        return "redirect:/method2";
        // If method return ModelAndView
        // return new ModelAndView("redirect:/method2");
    }
}

控制器2:

@Controller
public class Controller22 {
    @RequestMapping("/method2")
    public String method1(Model model) {
        model.addAttribute("method", "method2");
        return "method";
        //If method return ModelAndView
        //  model.addAttribute("method", "method2");        
        //  return new ModelAndView("method");
    }
}

看法:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Method1</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="'Method, ' + ${method} + '!'" />
</body>
</html>
于 2018-12-21T07:43:03.120 回答
0

编写另一个处理程序,Controller2其中将调用redirectMethod().

Controller2

@RequestMapping(value = "/redirectFromUser", method = RequestMethod.GET)
public ModelAndView handleRedirectionFromUser() {
    return redirectMethod();
}

并在UserFormController

@RequestMapping(value = "/method1", method = RequestMethod.GET)
public String redirectFormPage() {
    return "redirect:/url/to/redirectFromUser";
}
于 2018-12-21T10:25:26.853 回答