使用spring mvc做一个网站。我添加了一个SignupController来处理所有与注册相关的请求。用户注册后,我将其添加到使用@Scope(“会话”)的会话中。下面是SignupController代码,
@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。我的理解是,当我使用@Scope(“session”)作为控制器时,所有实例变量都将添加到HttpSession中。因此,通过这种理解,我尝试在userHomePage.jsp中访问此“SessionUser”,
Welcome to <%=session.getAttribute("sessionUser")%>
但它会抛出无效。
所以我的问题是如何在mvc控制器中使用@Scope(“session”)保存的jsp页面中的会话变量值。
注意:我的工作是通过ModelAndView将签名的用户ID传递给jsp页面,但似乎在这些页面中传递这些值会让我回到使用QueryStrings天的页面之间管理状态。
答案 0 :(得分:2)
当您为控制器指定@Scope(“session”)时,Spring现在将确保每个会话都有一个唯一的控制器实例,因此您将能够将会话特定状态(如sessionUser)保持为实例变量。
但是要向UI公开变量,该变量必须是模型/会话属性的一部分,您可以使用@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
....
}
}
答案 1 :(得分:0)
我从来没有尝试过使用jsp进行Spring集成,因为我一直都在使用jsf,但我会尝试一下:
首先:为您感兴趣的属性添加getter和setter(添加到控制器)。
@Controller
@Scope("session")
public class SignupController {
...
private String sessionUser;
public void setSessionUser(String sessionUser) {
this.sessionUser = sessionUser;
}
public String getSessionUser() {
return this.sessionUser;
}
...
然后:在jsp中调用它:
Welcome to ${session.sessionUser}
这对你有用吗? :)如果没有,我会尝试:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
Welcome to <c:out value="${session.sessionUser}" />