2014-01-11 5 views
4

Мое требование состоит в том, чтобы читать, обновлять, удалять & Вставить операции с данными из БД, используя переднюю часть как DOJO & Spring MVC.Как мы можем передать додзе EnhancedGrid Хранить предметы в Spring MVC Controller и сохранять в БД?

Я могу получить записи из db и отображения в расширенной сетке DOJO (редактируемая сетка). При редактировании данных сетки я не знаю, как отправить элементы хранилища грида в контроллер Spring и обновить/вставить/удалить в моей БД.

Вот код, который я попытался извлечь данные с контроллера Java на передний конец.

контроллер класса

@RequestMapping(value="eiaProjectSummary", produces = "application/json") 
public @ResponseBody Map<String, Object> getEIAProjectSummary(
    @RequestParam(required = true) String prodGroupId, 
    @RequestParam(required = true) List<Integer> eiaValues 
    ) {   
    Map<String, Object> returnList = new HashMap<String, Object>();   
    List<PCPTAnalysisBean> pcptList = //getting the list of records from DB.   
    returnList.put("eiaProjSummaryList", pcptList);   
    return returnList; 
} 

Javascript

dojo.xhrGet({  
    url: "pcptAnalysis/eiaProjectSummary.json?prodGroupId="+ prodGrpId +"&eiaValues="+eiaValues, 
    handleAs: "json", 
    preventCache: true, 
    load: function(response) { 
     var resultsGrid = new dojo.data.ItemFileReadStore({ 
      data: { 
       items:response.eiaProjSummaryList 
      } 
     }); 
     grid = new dojox.grid.EnhancedGrid({store: resultsGrid, 
      structure: layout, 
      selectionMode: "multiple", 
      rowSelector: '0px' 
     }); 
    } 
}); 

Кроме того, мне нужно отправить отредактированные Сетка хранения предметов из Javascript в Мой контроллер класса. Я не знаю, как отправить данные Grid Store из javascript ajax post и как его получить в моем классе класса Controller. Пожалуйста, помогите мне.

ответ

2

Ну, сначала вам понадобятся прослушиватели событий в вашем JavaScript (Dojo), которые вызывается, когда пользователь хочет обновить, удалить или вставить новую строку. Затем вы извлекли необходимые данные из объекта в строке, которая должна быть изменена. Для вставки и обновления вы можете использовать dojo.xhrPut и/или dojo.xhrPost. См. this discussion для хорошего определения различий между HTTP PUT и POST. Для удаления записи вы, естественно, будете использовать dojo.xhrDelete.

На стороне пружины используйте параметр @ModelAttribute для анализа параметров запроса в Java-объект. Ниже приведен пример, в котором ProjectSummary является предопределенным POJO с геттерами и сеттерами, соответствующими параметрам запроса, ожидаемым для обновления.

@RequestMapping(value = "/projectsummary/{id}", method = RequestMethod.PUT) 
public void updateProjectSummary(@ModelAttribute("projectSummary") ProjectSummary projectSummary, @PathVariable long summmaryId, Model model) { 
    projectSummary.setId(summaryId); 

    // a pre-defined service object 
    service.updateProjectSummary(projectSummary); 

    model.addAttribute("success", true); 
} 

Чтобы использовать POST или DELETE вместо PUT, вы изменили бы RequestMethod.PUT к RequestMethod.POST или RequestMethod.DELETE. Для удаления вам, вероятно, не нужен атрибут model, а только идентификатор, переданный в URL-адресе для ресурса, который нужно удалить. Для POST он должен быть очень похож на PUT.

Надеюсь, это будет достаточно полезно, чтобы вы начали.

3

Посмотрите на этот рабочий demo, он сохранит от браузера Dojo клиент к весеннему серверу MVC.

3 JSON Клиенты передаются в запросе POST, имитируя содержимое сетки: два элемента, где в сетке, и один был добавлен.

3 элемента отправляются в POST-запрос как JSON и получают все сохраненные в базу данных с использованием JPA.Сервер возвращает обратно ответ JSON, содержащий 3 спас клиент или ошибку - see demo code here

Посмотреть демонстрационную работу:

enter image description here

Установку и эксплуатационные инструкции:

git clone https://[email protected]/mydevutils/dojo-spring-mvc-hello-world.git 
mvn clean install tomcat7:run-war 

Затем откройте браузер и перейдите по ссылке:

http://localhost:8080 

Для работы демо-версии необходима локальная база данных Postgres, которая стоит на месте в целях развития.

@Controller 
public class DojoSpringMvcController { 


    @Autowired(required =true) 
    private CustomerService customerService; 

    @RequestMapping(method = RequestMethod.POST , value = "/hello", produces = {MediaType.APPLICATION_JSON_VALUE}) 
    @ResponseBody 
    public List<Customer> sampleController(@RequestBody List<Customer> customers) { 

     for (Customer current : customers) { 
      customerService.saveCustomer(current); 
     } 

     return customers; 
    } 
} 

Код клиента:

Когда 'Send To Server' кнопки нажата, выполняется для передачи данных Этого кода ПОЛУЧИТЬ в:

var gridData = [{ssn:'0050', lastName: 'Customer1'}, {ssn: '0051', lastName:'Customer2'} ]; 

    function send() { 

     var ssn = document.getElementsByName('ssn')[0].value; 
     var lastName = document.getElementsByName('lastName')[0].value; 

     var newCustomer = {'ssn': ssn, 'lastName': lastName }; 

     // add to list of existing customers and do a POST with everything 
    gridData.push(newCustomer); 

     dojo.xhrPost({ 
      url: 'http://localhost:8080/dojo-hello-world/hello', 
      postData: dojo.toJson(gridData), 
      handleAs: "text", 
      headers: { 
      'Content-Type': 'application/json', 
      }, 
      load: function(response) { 
      console.log('Response: ' + response); 
      alert('JSON received from server:' + response); 
      }, 
      error: function(error) { 
       console.log(error); 
       alert('error occurred, check the console!'); 
      } 
     }); 

    } 
+0

мне нужна весь магазин [формат как объекты массива] dojo datagrid для передачи на сервер, и там мне нужно получить доступ ко всем свойствам в java-контроллере. –

+0

ОК, поэтому я изменил демоверсию, чтобы передать массив клиентов (JSON) на сервер в качестве запроса POST, и контроллер был изменен для десериализации ответа в список с использованием @RequestBody, как он выглядит? –

+0

Был ли этот пример тем, что вы искали, или это было что-то еще? –