[英]How to pass from one jsp to another jsp storing data in session with Spring
我想知道如何针对以下所述的特定方案使用sessionAttributes
和ModelAttributes
:
我有两个带有表单字段的jsp页面。 当我在第一个jsp页面中输入表单字段值并单击下一步时,这些填充的表单字段值应存储在session属性中,而不是存储在数据库中。 移至第二个jsp页面后,再次填写表单字段,然后单击Submit。 这次,第一个jsp(来自控制器的session属性)和第二个jsp页面表单字段值应保存在DB中。
请指导我如何实现这一目标。 如果有任何示例代码,那将是很大的帮助。
只需将数据存储在HttpSession上。 您可以使用以下功能从控制器管理会话信息:
private static HttpSession getSession() {
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return attr.getRequest().getSession();
}
public static void clear(String name) {
getSession().removeAttribute(name);
}
public static void clear() {
getSession().invalidate();
}
public static Object load(String name) {
return getSession().getAttribute(name);
}
public static void store(String name, Object value) {
getSession().setAttribute(name, value);
}
Yu可以使用以下命令从jsp访问会话:
<%= session.getAttribute("attributeName") %>
或搭配
${requestScope.attributeName}
您不需要使用Spring即可实现。 HttpSession是J2EE标准。 在上面的代码中,Spring用于以这种方式以静态方式进入会话
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
要获取会话,您只需要访问HttpRequest。
在您的控制器中,将值设置为Session Attributes。下面是示例代码。
@RequestMapping("/testing")
@Controller
public class TestController {
@RequestMapping(method = RequestMethod.GET)
public String testMethod(HttpServletRequest request){
request.getSession().setAttribute("name", "value");
return "testJsp";
}
}
要在JSP中访问相同的内容,请使用
${sessionScope.name}
。
Spring MVC文档中对此进行了介绍:
@Controller
@RequestMapping("/step1")
@SessionAttributes("myModelObject")
public class ControllerOne{
@GetMapping
publid String loadForm(ModelMap modelMap){
//presence of class level @SessionAttributes puts this is session
modelMap.addAttribute("myModelObject", new MyModelObject());
return "form1";
}
@PostMapping
//model attribute retrieved from session
public String handleSubmit(@ModelAttribute("myModelObject") MyModelObject myModelObject){
return "/step2";
}
}
@Controller
@RequestMapping("/step2")
public class ControllerTwo{
@GetMapping
publid String loadForm(){
return "form2";
}
@PostMapping
//model attribute retrieved from session
public String handleSubmit(@ModelAttribute("myModelObject") MyModelObject myModelObject, SessionStatus sessionStatus){
//process
//clear down session
//http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/support/SessionStatus.html
sessionStatus.setComplete();
return "nextView"
}
}
通常,Spring Web Flow对多步骤表单具有更高级的支持:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.