Spring MVC, как изменить объект команды формы с помощью вызова JavaScript или AJAX - PullRequest
0 голосов
/ 14 сентября 2011

Я использую Spring MVC 3.0 для создания веб-приложения.

Пользователь может получить клиентов, написав их идентификатор или просто отправив пустую форму, и я возвращаю всех клиентов, которых пользователь может перемещать между клиентами, используя кнопки. Вопрос в том, как сделать это через ajax или javascript без обратной передачи.

Я добавляю объект customer в modelAttribute и в свой файл jsp, используя:

 <form:form modelAttribute="Customer" method="POST">
           <form:input path="name"/>

@RequestMapping(value = "/customer", method = RequestMethod.GET)
    public String handleCustomer(Model md,HttpSession session) {

       Customer customer= (Customer ) session.getAttribute("customer");

        if( customer== null)
        {
            customer=  new Customer ();
        }
        md.addAttribute("Customer ",customer);
        return "customer";
    }

Вот вопрос, как изменить этот атрибут модели без обратной передачи. Теперь в соответствии с этим методом get, когда я устанавливаю объект Customer, устанавливаются все поля, так как я использую «путь» для привязки полей. Я пытался изменить через обратный вызов ajax, но он не работает. Я не хочу получать все поля и назначать одно за другим с помощью jQuery.

Вот моя функция JS:

    $("#Customer").submit(function() {
//                var customer= $(this).serializeObject();
//                $.postJSON("Customer", customer, function(data) {
//                  
//                });

                $.getJSON("customer/query.htm",{ id: $('#id').val() }, function(result) {                           

                    $('#testdiv').val(result);

            });
                return false;               
            });

Я испробовал функции как getJSON, так и postJSON. Можете ли вы связать какую-то книгу, учебник или документацию, это будет полезно.

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

Отправьте запрос со стандартными вызовами jQuery AJAX, например .getJSON.

В вашем обработчике Spring:

  1. Добавьте @ModelAttribute к сигнатуре метода-обработчика, чтобы Spring отобразил пары имя-значение из вызова AJAX в объект команды поддержки формы.
  2. Измените тип возвращаемого значения для метода-обработчика на @ResponseBody Map<String, ? extends Object> и добавьте ваши объекты на карту вместо Model.
  3. Добавьте Jackson JAR в свое приложение, чтобы Spring автоматически магически сериализовал объект ответа в JSON.

Вызовы jQuery отправляют запрос AJAX, Spring обрабатывает его, автоматически связывая пары имя-значение с объектом команды, а затем возвращает JSON обратно в метод jQuery.

@RequestMapping(value = "/customer", method = RequestMethod.GET)
public @ResponseBody List<Customer> handleCustomer(
      @ModelAttribute("Customer") Customer form,
      HttpSession session) {
    List<Customer> customers = new ArrayList<Customer>();
    if(form.getId() > 0) {
       // call your data access service to get that one customer
       Customer c = myCustomerService.getCustomer(form.getId());
       customers.add(c);
    } else {
       // call your data access service to return all customers
       customers = myCustomerService.getAllCustomers();
    }
    return customers;
}
0 голосов
/ 19 сентября 2011

Вот ответ на мой вопрос, я не смог найти способ обновить свою форму с помощью ответа json.

Но с помощью веб-запроса ajax.

Вот класс Utils ajax.

import org.springframework.web.context.request.WebRequest;

public class AjaxUtils {

    public static boolean isAjaxRequest(WebRequest webRequest) {
        String requestedWith = webRequest.getHeader("X-Requested-With");
        return requestedWith != null ? "XMLHttpRequest".equals(requestedWith) : false;
    }

    public static boolean isAjaxUploadRequest(WebRequest webRequest) {
        return webRequest.getParameter("ajaxUpload") != null;
    }

    private AjaxUtils() {}
}

в контроллере мы добавляем

 @RequestMapping(value = "/customer.htm", method = RequestMethod.GET)
    public String handleCustomer(Model md, HttpSession session,WebRequest webRequest) {

          Customer customer= (  Customer ) session.getAttribute("customer");

        if (customer== null) {
            customer= new   Customer();
        }
        md.addAttribute("Customer", customer);
        md.addAttribute("ajaxRequest", AjaxUtils.isAjaxRequest(webRequest));
        return "customer";
    }

    @RequestMapping(value = "/customer.htm", method = RequestMethod.POST)
        public String processSubmit(  Customer  customer, BindingResult result, WebRequest webRequest, HttpSession session, Model model) {
            customer= dataService.getCustomer(customer.getId());

            session.setAttribute("customer", customer);
            if (AjaxUtils.isAjaxRequest(webRequest)) {
                // prepare model for rendering success message in this request
                model.addAttribute("ajaxRequest", true);
                            model.addAttribute("Customer",customer);
                return null;
            }


            return "customer";
        }

функций, поэтому в jsp или на стороне просмотра мы публикуем страницу с:

$("#Customer").submit(function() {  
                    $.post($(this).attr("action"), $(this).serialize(), function(html) {
                        $("#customerdiv").replaceWith(html);

                    });
                    return false;  
                });

Для подведения итогов с помощью утилит ajaxВ классе мы устанавливаем тип запроса full postback или ajaxrequest в нашей функции-обработчике post, в которую мы вносили изменения, и эти изменения напрямую влияют на страницу и форму.Нет необходимости обрабатывать ответ или устанавливать все поля одно за другим с помощью jquery, надеюсь, это кому-нибудь поможет.

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