我们如何将 dojo EnhancedGrid Store 项目传递给 spring MVC Controller 并保存在 DB 中?

Jus*_*ohn 5 javascript java dojo spring-mvc dojox.grid.datagrid

我的要求是使用前端作为 DOJO & Spring MVC 从 DB 中读取、更新、删除和插入数据。

我能够从数据库中获取记录并显示在 DOJO 增强网格(可编辑网格)中。在编辑网格数据时,我不知道如何将网格存储项发送到我的 Spring Controller 和数据库中的更新/插入/删除。

这是我尝试将数据从 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;
}  
Run Code Online (Sandbox Code Playgroud)

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'
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

同样,我需要将编辑过的网格存储项从 Javascript 发送到我的控制器类。我不知道如何从 javascript ajax post 发送我的 Grid Store 数据以及如何在我的 Controller 类方法中接收它。请帮助我。

小智 2

首先,您需要 JavaScript (Dojo) 中的事件侦听器,当用户希望更新、删除或插入新行时调用这些事件侦听器。然后,您可以从要修改的行中的对象中获取必要的数据。对于插入和更新,您可以使用dojo.xhrPut和/或dojo.xhrPost。请参阅此讨论,了解 HTTP PUT 和 POST 之间差异的详细定义。要删除记录,您自然会使用dojo.xhrDelete。

在Spring方面,利用@ModelAttribute将请求参数解析为Java对象。下面是一个示例,其中 ProjectSummary 是一个预定义的 POJO,其 getter 和 setter 与更新所需的请求参数相匹配。

@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);
}
Run Code Online (Sandbox Code Playgroud)

要使用 POST 或 DELETE 而不是 PUT,请将 RequestMethod.PUT 更改为 RequestMethod.POST 或 RequestMethod.DELETE。对于删除,您可能不需要 model 属性,而只需要在要删除的资源的 URL 中传递一个标识符。对于 POST,它应该与 PUT 非常相似。

我希望这足以帮助您入门。