Spring SimpleFormController onSubmit параметры запроса - PullRequest
1 голос
/ 25 января 2010

Я использую SimpleFormController в своем приложении для обработки вложенных форм. я пропускаю одну вещь - это объект запроса, который передается onSubmit(request,response..) отличается от исходного объекта запроса, полученного formBackingObject(..). вероятно, потому что это снова новый запрос от сети.

Я просто хочу использовать те же параметры из объекта запроса в onSubmit(..), к которым я смог получить доступ в formBackingObject(..).

Возможно, я смогу сохранить их и передать через скрытые поля из jsp, но я пытаюсь найти элегантный подход.

есть ли способ достичь этого?

EDIT:

я переопределяю

formBackingObject(HttpServletRequest request)`  

и

onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors)

методов в моем классе.

для начального представления будет вызвано formbackingObject(..), и у меня будут некоторые переменные из объекта запроса, затем, если пользователь отправит форму, будет вызвана onSubmit(..), тогда у меня будет другой объект запроса, отличный от того, который я получил в formbackingObject(..).

я спрашиваю, есть ли способ удержать первоначальный «запрос» параметры (request.getParameter() вид из ...) так что я могу использовать их в onSubmit(..) без отправки назад и вперед через скрытые поля? '

Ответы [ 2 ]

2 голосов
/ 25 января 2010

Метод formBackingObject() вызывается, когда пользователь делает запрос на начальное представление формы. Это совершенно отдельный HTTP-запрос, когда пользователь отправляет форму, когда вызывается метод onSubmit().

Если вы хотите сохранить состояние из первого HTTP-запроса, чтобы оно было доступно во втором HTTP-запросе, лучше всего сохранить его в сеансе HTTP.

Например: в вашем formBackingObject() методе:

HttpSession session = request.getSession();
session.setAttribute("param1", request.getParameter("param1"));
session.setAttribute("param2", request.getParameter("param2"));

и в вашем onSubmit() методе:

HttpSession session = request.getSession();
String param1 = (String) session.getAttribute("param1");
String param2 = (String) session.getAttribute("param2");
1 голос
/ 01 ноября 2011
Ожидается, что

formBackingObject() установит объект «команда», который передается в onSubmit() при следующей отправке. Команда Object - это просто POJO , к которому вы можете при необходимости создавать и добавлять атрибуты.

Обычно вы заполняете команду Object некоторыми данными, которые будут отображаться на экране из служебного вызова (который в конечном итоге поступает из БД), но ничто не мешает вам поместить в команду данные, поступившие в запросе в formBackingObject() Возьмите объект и снова потяните его, когда вызывается onSubmit(). Преимущество этого состоит в том, что вы не получите cruft , плавающие в вашей сессии.

Например, введите логическое значение из запроса в MyCommand в formBackingObject():

    protected Object formBackingObject(HttpServletRequest request)
    {
        boolean someBoolean = ServletRequestUtils.getBooleanParameter(request, "someBoolean");
        MyCommand myCommand = new MyCommand();
        myCommand.setSomeBoolean(someBoolean);
        // optionally get some data from the DB to set on myCommand here...
        return myCommand;
    }

Затем найдите это логическое значение внутри запроса в onSubmit():

    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors)
    {
        MyCommand myCommand = (MyCommand) command;
        if (myCommand.getSomeBoolean()) {
            System.out.println("someBoolean was set in formBackingObject!");
        }
    }

Обратите внимание, что myCommand виден только сеансу (поэтому другие пользователи, вошедшие в систему, не могут его видеть, и он уничтожается по окончании сеанса).

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