繁体   English   中英

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

[英]Persisting object data between controllers in Spring

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

<form:input path='requestId' style='display:none' />

<form:input path='currentUserId' style='display:none' />

<form:input path="step" style='display:none' />

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

@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();
}

另外,我也可以在.POST中执行Request request = requestManager.getRequestById(Integer.parseInt(requestId))

然后在所有表单字段上使用setter,但同样,我希望数据实际上独立存在而无需显式调用。

@Tim,如果我正确理解了您的要求,则您有一系列表格,并且您希望将信息从一种表格转移到另一种表格,而不必访问数据库或将请求变量从一种表格复制到另一种表格。 我可以支持@JB Nizel提出的使用HTTP会话的建议,但是您可能不希望使会话“沉重”。 毕竟,它是继application-scope之后的第二个最持久的作用域。

Spring Web Flow可能是答案。 Flow-scope允许您随着用户从一种表单前进到另一种表单而建立表单状态。 另外,您无需担心流程结束时表单范围的变量,这与您不想徘徊的会话变量不同。

暂无
暂无

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

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