我使用Spring MVC.我需要为请求或其他对象添加属性.它应该是将在屏幕上显示的消息.例如,如果我使用纯Servlet,我可能只是:
request.setAttribute("message", "User deleted");
Run Code Online (Sandbox Code Playgroud)
而不是在JSP页面上
<div id="message">${message}</div>
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在方法中做这样的事情时:
@RequestMapping(value = "/delete", method = RequestMethod.GET)
public String deleteUser(@RequestParam("login") String login,
ModelMap map, HttpServletRequest request)
Run Code Online (Sandbox Code Playgroud)
模型对象 -
model.addAttribute("message", "User deleted");
Run Code Online (Sandbox Code Playgroud)
地图 -
map.put("message", "User deleted");
Run Code Online (Sandbox Code Playgroud)
模型地图 -
map.put("message", "User deleted");
Run Code Online (Sandbox Code Playgroud)
HttpServletRequest -
request.setAttribute("message", "User deleted");
Run Code Online (Sandbox Code Playgroud)
没有显示.但在我的浏览器中我看到: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";
}
Run Code Online (Sandbox Code Playgroud)
在我的JSP中我也以这种方式显示用户登录:
${user.login}
Run Code Online (Sandbox Code Playgroud)
它需要来自Session的用户,我看到它登录
Sot*_*lis 16
有了您的新信息,问题就出在了redirect:.执行重定向时,发送带有302(或301)响应代码的HTTP响应,其中Location标题指向新URL.浏览器将向该位置发出新的HTTP请求.因此,您的请求属性(和模型属性)不再好,它们在新请求中不存在.
考虑使用flash属性.该RedirectAttributes班是要走的路.javadoc有一个很好的例子.
阿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
...
}
Run Code Online (Sandbox Code Playgroud)
只要相信它最终会在请求属性中,因此可以在你的jsp中使用.
当您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";
}
Run Code Online (Sandbox Code Playgroud)
redirectAttributes.addAttribute从您的属性构造请求参数,并使用请求参数重定向到所需的页面.并将addFlashAttribute属性存储在flashmap中(在用户会话中维护,并在下一次重定向请求得到满足后删除).
| 归档时间: |
|
| 查看次数: |
66762 次 |
| 最近记录: |