java中如何传递参数给控制器_java-如何将对象从一个控制器传递到另一个控制器...

我想传递第二个控制器的功能要接收的对象(放置在第一个控制器的功能模型中)并将接收到的对象放置在功能的模型中.

我知道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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值