Java SpringMVC-@Scope(“session”不';I don’我不能像预期的那样工作
我正在尝试使用SpringMVC开发简单的flashcards应用程序。 在我尝试用多个用户测试之前,一切都很顺利。 我希望每个用户都登录,并假设@Session(“scope”)将为每个用户重新创建每个bean。在我看来,这似乎不起作用-我登录了3个不同的设备,它都是连接在一起的,当我登录到一台计算机上时,第二台和第三台计算机上也同样登录。当我注销时-所有计算机都已注销 我很困惑-请帮助:Java SpringMVC-@Scope(“session”不';I don’我不能像预期的那样工作,java,session,spring-mvc,Java,Session,Spring Mvc,我正在尝试使用SpringMVC开发简单的flashcards应用程序。 在我尝试用多个用户测试之前,一切都很顺利。 我希望每个用户都登录,并假设@Session(“scope”)将为每个用户重新创建每个bean。在我看来,这似乎不起作用-我登录了3个不同的设备,它都是连接在一起的,当我登录到一台计算机上时,第二台和第三台计算机上也同样登录。当我注销时-所有计算机都已注销 我很困惑-请帮助: @Controller @Scope("session") @SessionAttributes(
@Controller
@Scope("session")
@SessionAttributes({"logged", "LoggedUser"})
@RequestMapping("/")
public class IndexController {
public static NewUser loggedUser;
@Autowired
private NewUserRepository newUserRepository;
@Autowired
private FlashcardRepository flashcardRepository;
(.....)
也许它与这个静态变量有关——我希望它在每个浏览器会话中都是独立的
@Scope
注释用于使整个bean会话对其所有属性都敏感@SessionAttributes
使您的模型对象会话感知,您需要手动填充和管理它(例如init)
正如@Sotirios Delimanolis所写,您应该了解静态和非静态属性之间的区别
如果我是科伦特,你在找这样的东西:
@Controller
@SessionAttributes({IndexController.LOGGED_USER_MODEL })
@RequestMapping("/")
public class IndexController {
private static final String LOGGED_USER_MODEL = "loggedUser";
public NewUser loggedUser;
@Autowired
private NewUserRepository newUserRepository;
@Autowired
private FlashcardRepository flashcardRepository;
@ModelAttribute(LOGGED_USER_MODEL)
public NewUser initLoggedUser() {
//this is to make sure that our session attribute model is always populated, otherwise Spring throws exception
return new NewUser();
}
@RequestMapping
public Model someMethod(@ModelAttribute(LOGGED_USER_MODEL) NewUser loggedUser) {
//do something with logged user, populete with repository for example
}
(……)
(……)
也许这有什么问题?我不确定是否每次会话都会重新创建此静态字段
对于所有这些混乱,我很抱歉-我只希望在每个新的浏览器会话中,这个静态字段都是空的。我理解静态在普通java中是如何工作的,但我对它在Spring上下文中如何与bean和多个用户一起工作感到困惑。我在这里的想法正确吗?好的-我知道哪里不对。。。每次创建新bean(使用会话范围)时,静态字段保持不变。我应该在非静态变量中存储登录数据。。。很抱歉给您带来困惑,谢谢 你知道字段的
static
是什么意思吗?您的@SessionAttributes
LoggerUser
与类字段loggedUser
之间没有关系。
if (loggedUser!=null){
model.addAttribute("LoggedUser", loggedUser.getName());}
if (loggedUser==null){
model.addAttribute("LoggedUser", "not logged");}
return "index";
}
@RequestMapping(value = "/logUser", method = RequestMethod.POST)
public String logUser(@ModelAttribute NewUser newUser, BindingResult result, ModelMap model) {
if (!newUserRepository.findByName(newUser.getName()).isEmpty()) {
loggedUser=newUserRepository.findByName(newUser.getName()).get(0);
DrillController.queueKeys=null;
DrillController.cards.clear();
DrillController.wrongAnswers=null;
if (loggedUser.getNumberOfRepsSetting()!=null) {
DrillController.NumberOfReps = Integer.parseInt(loggedUser.getNumberOfRepsSetting());
}
}
return "redirect:/";
}