如何使用Spring 3 MVC Annotations设置会话或全局属性

时间:2012-05-07 13:24:43

标签: jsp spring-mvc

我有一个使用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>

但是我在这里得到会话属性的空值。

还有其他方法可以达到这个目的吗?

1 个答案:

答案 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>