Java 在Spring中在控制器之间持久化对象数据

Java 在Spring中在控制器之间持久化对象数据,java,forms,spring-mvc,Java,Forms,Spring Mvc,我有一个名为Request的对象,它是我的门户的主要对象,它存储请求的所有信息、用户、他们的表单选择等。如何在不同的表单之间保留以前的所有信息?在每个.GET中,我必须设置请求对象,然后在每个.POST中,传递给它的唯一信息是.GET页面上表单中的内容。因此,在每个页面上,我必须有隐藏字段,例如 我需要这些字段,并且还希望请求对象中的其他字段不在表单上,而不必对对象中的每个字段重复这些字段 @RequestMapping(value = "/review", method = Reques

我有一个名为Request的对象,它是我的门户的主要对象,它存储请求的所有信息、用户、他们的表单选择等。如何在不同的表单之间保留以前的所有信息?在每个.GET中,我必须设置请求对象,然后在每个.POST中,传递给它的唯一信息是.GET页面上表单中的内容。因此,在每个页面上,我必须有隐藏字段,例如

我需要这些字段,并且还希望请求对象中的其他字段不在表单上,而不必对对象中的每个字段重复这些字段

@RequestMapping(value = "/review", method = RequestMethod.GET)
public ModelAndView showCorReview(@RequestParam(value = "requestId") String requestId,
                                  @CookieValue(value = "EMP_ID", defaultValue = "168") int userId)
{
    Request request = requestManager.getRequestById(Integer.parseInt(requestId));

    request.setCurrentUserId(userId);

    String pageTitle = "2.1: Initiate New Service Request -- (Review)";
    ModelAndView mav = new ModelAndView();
    mav.setViewName("newRequest/review");
    mav.addObject("title", pageTitle);
    mav.addObject("request", request);
    mav.addObject("cpm", userManager.getUserById(request.getCpm()).getName());
    return mav;
}

@RequestMapping(value = "/review", method = RequestMethod.POST)
public String saveReview(Request request, @RequestParam(value = "commentData", required = false) String[] additionalComments)
{
    if (additionalComments != null)
        commentLogManager.addCommentLog(additionalComments, request);

    if (request.getRejectReason() == "")
    {
        request.setCpm(admin.getCPM(request.getContract()).getId());
        request.setCor(admin.getCOR(request.getContract()).getId());
        requestManager.updateRequest(request);           
    }
    else
    {
        if (request.getSubmitType().equals("return"))
        {
            request.setNextStep(1);
            requestManager.moveRequestToStep(request);
        }
    }
    return worksheetUrl + request.getId();
}
另外,我也可以在岗位上做
Request-Request=requestManager.getRequestById(Integer.parseInt(requestId))


然后在所有表单字段上使用setter,但同样,我希望数据能够在不显式调用它的情况下实际保留在自己的字段中。

@Tim,如果我正确理解您的要求,您有一系列表单,并且希望将信息从一个表单传输到下一个表单,而无需访问数据库或将请求变量从一个表单复制到另一个表单。我可以支持@JB Nizel关于使用HTTP会话的建议,但您可能不想让会话变得“沉重”;毕竟,它是仅次于应用程序范围的第二个最持久的范围


也许这就是答案<代码>流动范围允许您在用户从一个表单转到下一个表单时建立表单状态。此外,当流结束时,您不必担心表单范围的变量,这与您不希望在其中逗留的会话变量不同。

您听说过隐藏字段吗?那么使用数据库和HTTP会话如何?我说过我使用的是隐藏字段,但是当请求对象有30多个字段,并且在给定的表单上只使用了其中的一部分时,我不想在每个页面上添加20个额外的隐藏字段。我再次声明,我可以从数据库中获取它,但我不想在每次post/get时都点击数据库,因为我认为有一种方法可以在它们之间连续传递请求对象的数据,而不必到数据库中隐藏带有显示的输入:无不是隐藏字段。html有一个真正的隐藏字段
input type=“hidden”
。Spring在这里有它:听起来你的最佳选择是使用会话。你没有像中那样使用隐藏字段。在您尝试查找更多信息后,我没有看到type='hidden'与type='text'显示的功能性有任何区别:无,因此我没有看到这将如何改变任何一个起初看起来不错的选项,不幸的是,用户不一定只有一条路径。他们可以从表格a到表格e,然后需要更改某些内容,然后返回到表格b,并在任何时候保存,稍后返回。因此,听起来我可能需要研究如何为请求对象实现会话