Сохранение данных объекта между контроллерами в Spring - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть объект с именем 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))

Затем используйте сеттеры во всех полях формы, но опять же, я бы предпочел, чтобы данные фактически сохранялись сами по себе, без явного вызова этого.

1 Ответ

0 голосов
/ 14 февраля 2012

@ Тим, если я правильно понял ваше требование, у вас есть последовательность форм, и вы хотели бы передавать информацию из одной формы в другую, не обращаясь к базе данных или не копируя переменные запроса из одной формы в другую. Я мог бы поддержать предложение @JB Низела использовать HTTP-сессию, но вы можете не захотеть делать сессию «тяжелой»; в конце концов, это следующая наиболее постоянная область после области применения.

Spring Web Flow может быть ответом. Flow-scope позволит вам создать состояние формы по мере перехода пользователя от одной формы к другой. Кроме того, вам не нужно беспокоиться о переменных в области формы после завершения потока, в отличие от переменных сеанса, которые вы не хотите задерживать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...