繁体   English   中英

如何从一个jsp传递到另一个与Spring会话中存储数据的jsp

[英]How to pass from one jsp to another jsp storing data in session with Spring

我想知道如何针对以下所述的特定方案使用sessionAttributesModelAttributes

我有两个带有表单字段的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文档中对此进行了介绍:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-sessionattrib

@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对多步骤表单具有更高级的支持:

http://projects.spring.io/spring-webflow/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM