我正在使用spring mvc。在我登录时设置会话属性。用户登录时,我有一个搜索页面 他可以获得有关用户的更多详细信息。没有登录意味着他只能为我设置的目的获得有限的细节 @SessionAttributes中的会话对象在登录表单和用户搜索表单创建中我检查了session属性是否有值 如果不是表示设置默认值。但是当我提交表单时,它会显示错误的HTTP状态
500 - Expected session attribute
@RequestMapping(value = "/user-search", method = RequestMethod.GET)
public String initUserSearchForm(Model model) {
User user = new User();
model.addAttribute("User", user);
if(!model.containsAttribute("userObject"))
model.addAttribute(createDefaultUserCredntials());
return "user";
}
@RequestMapping(value = "/user-byName", method = RequestMethod.GET)
public
@ResponseBody
String getUserByName(HttpServletRequest request,@ModelAttribute("userObject")User user) {
....
....
}
错误是
org.springframework.web.HttpSessionRequiredException: Expected session attribute 'userObject'
org.springframework.web.method.annotation.ModelFactory.initModel(ModelFactory.java:103)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:723)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:687)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
答案 0 :(得分:8)
因为您已声明为sessionattribute,所以在调用控制器时,您应该在会话中提供userObject属性。将它作为ModelAttribbute返回,它将正常工作。将以下代码添加到控制器
@ModelAttribute("userObject")
public UserObject getUserObject() {
return new UserObject();
}
答案 1 :(得分:2)
您在哪里设置代码中的'userObject'。我没有在你的代码中看到。根据你的报价 你在表单初始化
中设置 @RequestMapping(value = "/user-search", method = RequestMethod.GET)
public String initUserSearchForm(Model model) {
User user = new User();
model.addAttribute("User", user);
if(!model.containsAttribute("userObject"))
model.addAttribute('userObject',createDefaultUserCredntials());
return "user";
}
你必须使用这样model.addAttribute('userObject',createDefaultUserCredntials());
,否则它只在模型中设置而不在会话中