java HTTP 状态 500 - 预期的会话属性“userObject”
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17737913/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
HTTP Status 500 - Expected session attribute 'userObject'
提问by Hymanyesind
I am using spring mvc. in that i set the session attribute when we login. I have one search page when the user is logined he can get more details about the user. without login means he can get only limited details for that purpose i set the session object in @SessionAttributes in the login form and in the user search form creation i checked that the session attribute has value if not means set the default value. but when i submit the form it shows error HTTP Status
我正在使用 spring mvc。因为我在登录时设置了会话属性。当用户登录时,我有一个搜索页面,他可以获得有关用户的更多详细信息。没有登录意味着他只能为此目的获得有限的详细信息,我在登录表单中的@SessionAttributes 中设置了会话对象,并在用户搜索表单创建中检查了会话属性是否具有值,否则意味着设置默认值。但是当我提交表单时,它显示错误 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) {
....
....
}
error is
错误是
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)
回答by ArunM
Because you have declared as a sessionattribute, you are expected to provide a userObject attribute in the session when the controller is being invoked. Return it as a ModelAttribbute and it will work fine. Add the following code to your controller
因为您已声明为 sessionattribute,所以在调用控制器时,您应该在会话中提供 userObject 属性。将其作为 ModelAttribbute 返回,它会正常工作。将以下代码添加到您的控制器
@ModelAttribute("userObject")
public UserObject getUserObject() {
return new UserObject();
}
回答by muthu
Where do you set the 'userObject' in your code. I did not see in your code. As per your quote you set in the form initialization
您在哪里设置代码中的“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";
}
you have to use like this model.addAttribute('userObject',createDefaultUserCredntials());
otherwise it sets only in model not in session
你必须像这样使用model.addAttribute('userObject',createDefaultUserCredntials());
否则它只会在模型中设置而不是在会话中