我在控制器中创建了两个会话范围对象,如@SessionAttributes({"userObj","simpleValue"})
。如何在Spring中存储数据是会话范围
我加入这些变量中的用户对象和字符串在我的控制器是这样的:
modelAndView.addObject("userObj", user);
modelAndView.addObject("simpleValue", "Hello World");
User
类是一个简单的类与2个属性id
& name
。假设我在一个名为Controller1
的控制器中创建了这个控制台,它显示了Page1
。我可以在page1
中看到我的会话变量的数据。
现在我创造了另一个控制器说Controller2
(该控制器具有page1
或Controller1
没有关系),这显示page2
,现在在这个新的一页,我只能够访问单个会话属性为simpleValue
,我不能够访问userObj
,我得到空的结果。
按照该@SessionAttributes,它说:
注:由于使用这个注解来表示对应 到指定的处理器的模型属性,越来越透明地储存 在对话会话的会话属性。一旦 处理程序指示完成其会话会话,那些属性将被删除。因此, 使用此功能的这种对话属性 应该在 特定处理程序的对话过程中临时存储在会话中。
所以我有2个问题在这里:
1)我无法理解为什么春天让我访问page2
简单的属性,但不是用户对象。
2)该文件还说,我们必须使用传统的session
或WebRequest
。我能够使用sessison
并访问变量,但有人可以帮助我如何使用WebRequest
在会话中存储对象?
这是我使用的代码:
Controller1.java
@Controller
@SessionAttributes({"mySessionAttr","userObj"})
public class Controller1 {
@RequestMapping(value="/page1")
public ModelAndView singleFieldPage() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("mySessionAttr", "Hello World");
modelAndView.addObject("userObj", new User(1,"Scott"));
modelAndView.setViewName("page1");
return modelAndView;
}
}
Controller2.java
@Controller
public class Controller2 {
@RequestMapping(value="/page2")
public ModelAndView singleFieldPage(HttpSession session) {
return new ModelAndView("page2");
}
}
的Page1.jsp & page2.jsp ,都有相同的代码。
<p>Session variable : ${simpleValue}</p>
<p>Product's name is ${userObj.name}. The id is ${userObj.id}
这是我的用户。java的:
公共类用户{
private int id;
private String name;
public User() {
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
// Setters & Getters
}
这是我的配置文件:
春基于配置
@Configuration
@ComponentScan("com.examples")
@EnableWebMvc
public class WebAppConfig {
@Bean
public UrlBasedViewResolver setupViewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/WEB-INF/pages/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
}
基于Web的配置
public class Initializer implements WebApplicationInitializer {
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(WebAppConfig.class);
ctx.setServletContext(servletContext);
Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.addMapping("/");
servlet.setLoadOnStartup(1);
}
}
你可以发布User类的实现吗? –
好友发布您的控制器1的代码为post方法,我有强烈的怀疑,你正在做status.setComplete(); – Mudassar
@FranciscoSpaeth,添加了我的代码,请检查并告诉我是否需要其他细节。 – Chaitanya