我想传递第二个控制器的功能要接收的对象(放置在第一个控制器的功能模型中)并将接收到的对象放置在功能的模型中.
我知道HTTP是无状态的,但是有没有一种方法可以在不使用Spring MVC中的会话的情况下将对象从一个控制器传递到另一个控制器?谢谢.
请参阅下面提供的示例代码.
FirstController.java
@RequestMapping(value="search-user",method=RequestMethod.POST)
public ModelAndView searchUser (HttpServletRequest request) {
//Retrieve the search query by request.getParameter
String searchQuery = request.getParameter("searchQuery");
//Search for the user (this is the object that I want to pass)
User user = userDao.searchUser(searchQuery);
ModelAndView mav = new ModelAndView(new RedirectView("display-searched-user"));
mav.addObject("user",user);
return mav;
}
SecondController.java
@RequestMapping(value="display-searched-user",method={RequestMethod.GET,RequestMethod.POST})
public ModelAndView displayResultUser (HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
mav.setViewName("result");
//I want to receive the object from the FirstController and set that object in this function's model.
return mav;
}
解决方法:
您将需要从客户端发送2个呼叫,并将“用户”发送到第二个控制器(您应该对其进行修改以接受用户).因此,对“ / search-user”的第一次调用将返回一个包含用户的对象.客户端提取用户并将其发送到“ / display-searched-user”.
另一种方法可能是,第二个控制器中的请求也接受参数“ searchQuery”.在这种情况下,只需将您的第二个控制器修改为如下所示:
@RequestMapping(value="display-searched-user",method={RequestMethod.GET,RequestMethod.POST})
public ModelAndView displayResultUser (HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
mav.setViewName("result");
FirstController fc = new FirstController();
return fc.searchUser(request);
}
编辑:
我刚刚读过CrazySabbath提出的创建运输班的建议.假设两个控制器都可以访问它,我将实现以下运输类:
public class UserTransporter {
private static boolean userAvailable = false;
private static User user;
public static boolean isUserAvailable() {
return userAvailable;
}
public static void setUser(User user) {
UserTransporter.user = user;
userAvailable = true;
}
public static User getUser() {
userAvailable = false;
return user;
}
}
只是要清楚一点:我添加了布尔变量,因为我想使它不可能通过null或获取用户来获得,而这以前已经通过调用获得了.如果您不想检查,只需删除布尔值和我使用过的所有行即可.
需要将第一个控制器更改为:
@RequestMapping(value="search-user",method=RequestMethod.POST)
public ModelAndView searchUser (HttpServletRequest request) {
//Retrieve the search query by request.getParameter
String searchQuery = request.getParameter("searchQuery");
//Search for the user (this is the object that I want to pass)
User user = userDao.searchUser(searchQuery);
ModelAndView mav = new ModelAndView(new RedirectView("display-searched-user"));
mav.addObject("user",user);
UserTransporter.setUser(user);
return mav;
}
第二个控制器将需要更改为此:
@RequestMapping(value="display-searched-user",method={RequestMethod.GET,RequestMethod.POST})
public ModelAndView displayResultUser (HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
mav.setViewName("result");
User user;
if(UserTransporter.isUserAvailable()) user = UserTransporter.getUser();
else return "ERROR, no user available to display";
//do something with the obtained user object
return mav;
}
标签:java,spring-mvc,controller
来源: https://codeday.me/bug/20191110/2014454.html