我使用 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 -
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 中获取用户并且我看到它登录
最佳答案
根据您的新信息,问题是 redirect:
。当您进行重定向时,您会发送带有 302(或 301)响应代码的 HTTP 响应以及指向新 url 的 Location
header 。浏览器将向该位置发出新的 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 中可用。
关于java - Spring MVC 将属性设置为 request/model/modelMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18983935/