我有一个使用Spring MVC用Java编写的简单应用程序。凭据类只包含用户名和&密码,在登录时提供。
理想情况下,我希望每个jsp页面上都有人名和全名。我正在考虑设置会话属性。
我的控制器类:
@RequestMapping(value = "/menu", method=RequestMethod.POST)
public String addContact(Map<String, Object> map,@ModelAttribute("user")
User user, BindingResult result, SessionStatus status,HttpSession session) {
session.setAttribute("DisplyName", u.getDisplayName());
我的JSP:
<div class="wlctxt">Welcome <%=session.getAttribute("DisplyName") %></div>
但是我在这里得到会话属性的空值。
还有其他方法可以达到这个目的吗?
答案 0 :(得分:0)
您不需要输入会话属性DisplayName。你对每个请求都这样做。你有模型属性,它将被放入请求中,所以在jsp中你可以访问它:
<div class="wlctxt">Welcome <c:out value="${user.displayName}"/></div>
进入会话有很多关键词你必须要关心。如果您的用户更改显示名称怎么办?您应该在会话中更新。或者更关键:改变一些访问权限?在每个可能的地方很容易在会话中更新。
我通过内存缓存(从性能的角度从DB expansibe读取)获取会话userId并执行下一步:
@Controller
public class SomeController {
@Autowired
private UserService userService;
@RequestMapping(...)
public String getSomePage(HttpServletRequest request, HttpSession session) {
Long userId = (Long) session.getAtribute("currentUserId");
User user = userService.get(userId);
request.setAttribute("currentUser", user);
}
在jsp中你可以访问它:
<div>Wellcome <c:out value="${currentUser.displayName}"/>!</div>