我有一个名为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,但同样,我更希望数据实际上保留在它上面而不显式调用它。
答案 0 :(得分:0)
@Tim,如果我正确地理解了您的要求,您就有了一系列表单,并且您希望将信息从一个表单传输到下一个表单,而无需访问数据库或将请求变量从一个表单复制到另一个表单。我可以支持@JB Nizel建议使用HTTP Session,但你可能不想让会话变得“沉重”;毕竟,它是应用范围之后的下一个最持久的范围。
Spring Web Flow可能就是答案。当用户从一个表单前进到下一个表单时,Flow-scope
将允许您构建表单状态。另外,当流程结束时,您不必担心表单范围的变量,这与您不想留下的会话变量不同。