Форма отправки и функция javascript, вызывающая нажатие кнопки отправки в spring mvc?

В событии нажатия кнопки отправки я вызываю функцию js для получения ввода пользователя и отправки на сервер для обработки. В то же время мне нужно отправить форму со всеми заполненными данными. Я поставил <button type="button"> вместо <button type="submit">, так как когда я ставлю «тип» при отправке, возникает ошибка. Там js работает нормально, но значения полей не выбираются методом контроллера.

Как я могу сделать это с помощью только одной кнопки? Вот мой метод обработчика в контроллере:

@RequestMapping(value = "/add_package")
    public
    @ResponseBody
    ModelAndView addPackage(@ModelAttribute("newPackage") Package newPackage,
                            HttpServletRequest request) {

        LOGGER.error("package objct {}",newPackage);// here I am getting objects with null values !!

        String s = request.getParameter("test");
        LOGGER.trace("test val = {}", s);

        ObjectMapper objectMapper = new ObjectMapper();
        List<Package> cats = null;
        String pkgName = newPackage.getPackName();
        try {

           ...
        } catch (Exception e) {
            ..
            LOGGER.error("error in package add {}", e.getMessage());
        }

        return new ModelAndView(new RedirectView("add"));
    }

Вот код jsp для кнопки:

<form:button type="button" class="btn btn-success" id="btnAddNewPkg" onclick="contentPackge()"><span class="glyphicon glyphicon-plus"></span>

Добавлять


person SMash    schedule 17.11.2016    source источник
comment
Вы можете поделиться функцией js? Как вы общаетесь с диспетчером? с помощью аякса? или напрямую отправить форму?   -  person brk    schedule 17.11.2016
comment
@ user2181397 Я использую ajax. Вот. $.ajax({ url: "https://localhost:8443/admin/packages/add_package", data:{"test":JSON.stringify(jsonObj)}, // type: "POST", success: function (result) { } });   -  person SMash    schedule 17.11.2016
comment
попробуйте обновить часть кода с URL-адресом и указать url:./add_package/   -  person Omasu Plus    schedule 17.11.2016
comment
@user2181397 user2181397 Это не сработало .. Тем не менее я получаю ту же ошибку. Кстати, в настоящее время эта функция ajax работает хорошо. Что я хочу сделать, так это вызвать эту функцию для получения некоторых значений и отправки формы в событии нажатия кнопки.   -  person SMash    schedule 17.11.2016
comment
видите, вы должны отправить форму после того, как ajax был успешно вызван, что находится в функции успеха ajax, вы должны вручную отправить форму с помощью функции jquery.submit(). В противном случае это не сработает. потому что это может нарушить функцию ajax .или у вас может быть функция задержки времени после нажатия кнопки отправки.   -  person Manoj Ramanan    schedule 17.11.2016
comment
@RamanaManoj Итак, мне нужно изменить тип кнопки на submit? Если вы можете показать, как использовать эту функцию задержки времени'?   -  person SMash    schedule 17.11.2016
comment
@SMash покажи нам, что такое jsonObj?   -  person ScanQR    schedule 17.11.2016


Ответы (2)


Я не думаю, что вам нужно передавать url как https://localhost:8443/admin/packages/add_package, вместо этого будет достаточно только /add_package.

Кроме того, вам также может потребоваться предоставить url-pattern

Во-вторых, для ответа ajax я не уверен, зачем вам снова нужен ModelAndView. Вы можете исследовать redirect свойство

Если вы используете button="submit" , вам нужно использовать event.preventDefault(), чтобы остановить поведение по умолчанию. Я думаю, что использование button="button" будет работать нормально

person brk    schedule 17.11.2016
comment
Этот метод обработчика используется для отправки сведений о новом элементе в базу данных. И почему я возвращаю ModelAndView, чтобы предоставить ту же страницу просмотра, которая отображается с добавлением шаблона URL. просто мне нужно вызвать эту функцию для получения некоторых значений и отправки формы в одно и то же событие нажатия кнопки - person SMash; 17.11.2016

Видите, вы должны отправить форму после успешного вызова ajax, который находится в функции успеха ajax, вы должны вручную отправить форму с помощью функции jquery.submit(). В противном случае это не сработает. потому что это может нарушить функцию ajax .или у вас может быть функция задержки времени после нажатия кнопки отправки.

это неприятный способ сделать это. Я предпочитаю, чтобы вы вызывали функцию отправки в успехе ajax и сохраняли тип кнопки как кнопку

    $( "#target" ).submit(function( event ) {
    alert( "Handler for .submit() called." );
    event.preventDefault();showloadingif();
    setTimeout(function(){ $("#formId").submit(); }, 3000);         
});
person Manoj Ramanan    schedule 17.11.2016
comment
Итак, мне нужно изменить тип кнопки для отправки? Если вы можете показать, как использовать эту функцию задержки времени'? - person SMash; 17.11.2016
comment
Не могли бы вы уточнить функцию showloadingif(); что здесь? - person SMash; 24.11.2016