Spring MVC 将属性设置为请求/模型/模型映射

2022-09-03 05:30:59

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

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:// 本地主机:8081 /project/index?message=User+delete

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

更新:

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

 @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}

它从会话中获取用户,我看到它登录


答案 1

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

考虑使用 flash 属性。上课是要走的路。javadoc有一个很好的例子。RedirectAttributes


在请求处理过程中,属性会稍后添加到请求属性中。因此,您不会看到它直接执行此操作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中可用。


答案 2

当您要访问新 URL 时,浏览器实际上正在向 .并且请求属性不存在于新请求中。redirectingredirect URLmap.addAttribute("message", "User " + login + " deleted");

您可以使用 向用户显示:RedirectAttributesmessage

@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


推荐