spring - 如何使用 mvc Controller 中使用 @Scope ("session")保存的 jsp 页面中 session 变量的值

标签 spring spring-mvc

使用spring mvc做一个网站。我添加了一个 SignupController 来处理所有与注册相关的请求。用户注册后,我将使用 @Scope("session") 将其添加到 session 中。下面是 SignupController 代码,

SignupController.java

@Controller
@Scope("session")
public class SignupController {

@Autowired
SignupServiceInter signUpService;

private static final Logger logger = Logger.getLogger(SignupController.class);

private String sessionUser;

@RequestMapping("/SignupService")
public ModelAndView signUp(@RequestParam("userid") String userId, 
    @RequestParam("password") String password,@RequestParam("mailid") String emailId){

    logger.debug("  userId:"+userId+"::Password::"+password+"::");

    String signupResult;

    try {

        signUpService.registerUser(userId, password,emailId);
        sessionUser  = userId; //adding the sign up user to the session
        return new ModelAndView("userHomePage","loginResult","Success"); 
         //Navigate to user Home page if everything goes right

    } catch (UserExistsException e) {
        signupResult = e.toString();
        return new ModelAndView("signUp","loginResult", signupResult); 
         //Navigate to signUp page back if user does not exist
    }
}
 }

我正在使用“sessionUser”变量来存储注册的用户 ID。我的理解是,当我对 Controller 使用 @Scope("session") 时,所有实例变量都将添加到 HttpSession 中。因此,根据这种理解,我尝试在 userHomePage.jsp 中访问此“SessionUser”,

userHomepage.jsp

Welcome to <%=session.getAttribute("sessionUser")%>

但它抛出 null。

所以我的问题是如何使用 jsp 页面中 session 变量的值,这些值是在 mvc Controller 中使用 @Scope("session") 保存的。

注意:我的解决方法是通过 ModelAndView 将签名的用户 ID 传递到 jsp 页面,但似乎在页面之间传递这样的值让我回到使用 QueryStrings 来管理页面之间的状态。

最佳答案

当您为 Controller 指定 @Scope("session") 时,Spring 现在将确保每个 session 都有一个唯一的 Controller 实例,因此您将能够将 session 特定状态(如 sessionUser)保留为实例变量。

但是,要向 UI 公开变量,该变量必须是模型/ session 属性的一部分,您可以使用 @ModelAttribute("sessionUser") 或 @SessionAttribute("sessionUser") 来实现

@Controller
@SessionAttribute("sessionUser")
public class SignupController {
@RequestMapping("/SignupService")
public ModelAndView signUp(@RequestParam("userid") String userId, 
    @RequestParam("password") String password,@RequestParam("mailid") String emailId,  Model model){
...
    try {

        signUpService.registerUser(userId, password,emailId);
        sessionUser  = userId; //adding the sign up user to the session
        model.addAttribute("sessionUser", sessionUser);

        return new ModelAndView("userHomePage","loginResult","Success"); 
         //Navigate to user Home page if everything goes right
       ....
}
}

关于spring - 如何使用 mvc Controller 中使用 @Scope ("session")保存的 jsp 页面中 session 变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12149820/

相关文章:

java - 当我保存实体时,从属集合会重复

spring-mvc - hasPermission没有检查字段id怎么办?

spring - 启动 resourceHandlerMapping bean 时未设置 ServletContext

java - FlatFileItemReader 制表符分隔符不起作用

java - 如何检查Grails应用程序的GORM版本

java - Spring MVC 设置中的配置问题

java - Spring MVC 相当于 Struts for I18N 的 getText()

java - 在 Spring 配置中初始化空数组列表?

Spring-Boot - 激活休眠二级缓存

java - java代码中解析json对象