Spring MVC将属性设置为request / model / modelMap

时间:2013-09-24 14:08:47

标签: java spring-mvc

我使用的是Spring MVC。我需要为请求或其他对象添加属性。它应该是将在屏幕上显示的消息。例如,如果我使用纯Servlet,我可能只是:

request.setAttribute("message", "User deleted");

而不是JSP页面

<div id="message">${message}</div>

但是当我尝试在方法中做这样的事情时:

@RequestMapping(value = "/delete", method = RequestMethod.GET)
public String deleteUser(@RequestParam("login") String login,
        ModelMap map, HttpServletRequest request)

模型对象 -

model.addAttribute("message", "User deleted");

地图 -

map.put("message", "User deleted");

模型地图 -

map.put("message", "User deleted");

HttpServletRequest -

request.setAttribute("message", "User deleted");
没有任何显示。但在我的浏览器中,我看到:http:// localhost:8081 / project / index?message = User + deleted

如何解决这个小问题? 谢谢你的回答

更新:

为了清楚理解,我尝试这样做:

 @RequestMapping(value = "/delete", method = RequestMethod.GET)
public String deleteUser(@RequestParam("login") String login,
        Model model) {
    dao.delete(login); // there is NO exeptions
    map.addAttribute("message", "User " + login + " deleted");
    return "redirect:" + "index";
}

在我的JSP中我也以这种方式显示用户登录:

${user.login}

它从Session获取用户,我看到它登录

3 个答案:

答案 0 :(得分:16)

根据您的新信息,问题是redirect:。当您执行重定向时,您发送一个HTTP响应,其响应代码为302(或301),其中Location标题指向新的URL。浏览器将向该位置发出新的HTTP请求。因此,您的请求属性(和模型属性)不再好,它们不存在于请求中。

考虑使用flash属性。 RedirectAttributes课程是要走的路。 The javadoc has a good example.


在请求处理期间,Model属性将被添加到请求属性中。因此,您不会直接看到它

@RequestMapping(value = "/delete", method = RequestMethod.GET)
public String deleteUser(@RequestParam("login") String login,
        ModelMap map, HttpServletRequest request)
    map.put("message", "User deleted");
    String message = (String) request.getAttribute("message"); // will return null
    ...
}

请相信它最终会出现在请求属性中,因此可以在jsp中使用。

答案 1 :(得分:7)

当您redirecting到新网址时,浏览器实际上是向redirect URL发送新请求。并且新请求中不存在请求属性map.addAttribute("message", "User " + login + " deleted");

您可以使用RedirectAttributes向用户显示message

@RequestMapping(value = "/delete", method = RequestMethod.GET)
public String deleteUser(@RequestParam("login") String login,
        Model model,RedirectAttributes redirectAttributes) {
    dao.delete(login); // there is NO exeptions
    //map.addAttribute("message", "User " + login + " deleted");
    redirectAttributes.addFlashAttribute("message", "User " + login + " deleted");
    return "redirect:" + "index";
}

redirectAttributes.addAttribute从您的属性构造请求参数,并使用请求参数重定向到所需的页面。 addFlashAttribute将属性存储在flashmap中(在用户会话中维护,并在下次重定向请求完成后删除)。

答案 2 :(得分:0)

您正在以错误的方式重定向它。而不是返回“redirect:”+“index”使用return“redirect:/ index”。将其重定向到您的get方法。因为redirectattributes是post / redirect / get属性。试试这个,你会在屏幕上看到一条flash信息。 而不是模型使用Redirectattributes。

redirectAttributes.addFlashAttribute(“errormsg”,“errormessage”); 返回“redirect:/index.do”;