我有一个会话属性:user,我有一个网址,我希望所有登录用户都可以查看这些网址,并且可以由未以用户身份登录的人公开查看。
所以我想做的是:
@Controller("myController")
@SessionAttributes({"user"})
public class MyController {
@RequestMapping(value = "/MyPage/{id}", method = RequestMethod.GET)
public ModelAndView getPage(@PathVariable Integer id) {
return modelandview1;
}
@RequestMapping(value = "/MyPage/{id}", method = RequestMethod.GET)
public ModelAndView getPage(@PathVariable Integer id, @ModelAttribute User user){
return modelandview2;
}
但是,我觉得它不会起作用...建议非常欢迎。
答案 0 :(得分:2)
你只需要第二种方法,即带有用户文章的方法。如果在没有可用于填充User模型的请求属性的情况下调用它,您将获得具有所有null(或所有默认)字段值的User实例,然后在方法体中相应地处理每种情况
答案 1 :(得分:1)
我认为这不是@SessionAttributes
的正确理由。此注释通常用于保留表单支持对象的原始实例,以避免通过隐藏的表单字段传递其状态的不相关部分。
您的情绪完全不同,因此最好明确使用HttpSession
:
@RequestMapping(value = "/MyPage/{id}", method = RequestMethod.GET)
public ModelAndView getPage(@PathVariable Integer id, HttpSession session) {
User user = (User) session.getAttribute(...);
if (user != null) {
...
} else {
...
}
}
另请注意,@ModelAttribute
是数据绑定的主题 - 用户可以通过传递请求参数来更改其字段。在这种情况下你肯定不想要它。