使用Spring Model属性设置js变量

时间:2017-08-16 10:17:18

标签: javascript ajax spring spring-mvc

我正在使用Spring Boot,有一点我不明白。 假设我有一个model,在Controller的方法中创建,注释为@ResponseBody注释。 我必须在这个模型中放入2个变量,一个String和一个int,我必须用它来在js文件中设置2个全局变量;如果ajax功能成功,则完成此设置。

所以,为简单起见,我们假设我的全局变量是global1global2;并且放在模型中的变量是String aint b;在这种情况下,必须发生的是:

$.ajax({
        ...<url, method and other actions here>...
        success: function(){
                 global1 = String a;
                 global2 = int b;
        }

我怀疑是3:

  1. 如何将变量String aint b放入模型中?我应该使用model.addObject()还是最好创建一个Modelmap对象,请使用ab填充此对象,然后将其放入模型中?这两种方法之间存在哪些差异?

  2. 在ajax函数中,当我有success: function()时,我应该将哪些参数输入到function()

  3. 在成功函数内部,如何使用模型数据设置全局变量?我可以使用什么语法来执行此操作?换句话说,当我拥有我的模型时,如何访问其变量并用于执行global1 = String aglobal2 = int b

2 个答案:

答案 0 :(得分:1)

您可以使用Model对象并使用addAttribute方法为ajax成功函数中需要的每个对象。在每个Spring方法中,您都可以添加Model对象,例如:

@RequestMapping(value="value", method = RequestMethod.POST)
    public @ResponseBody String yourMethod(@RequestParam(value="yourParam") String yourParam,
                       Model model){
    String a = "Your String";
    int b = 456;

    model.addAttribute("myString", a);
    model.addAttribute("myInt", b);

    return "";
}

必须使用一个参数声明成功函数,即响应。在此参数中,您将找到在模型对象(myStringmyInt)中添加的参数:

success: function(response){   
            // response.myString will be "Your String"
            // response.myInt will be 456
        }

答案 1 :(得分:1)

一般:干净的方法是在AJAX的数据中使用$("form").serialize(); param1=param1value&param2=param2value 并使用@ModelAttribute className className收回,但在编辑中你可能有很多问题,如checkBox或日期或单选按钮自动值检测,所以我建议你使用spring form后端并传回end对象并删除Ajax如果你能够!同样使用@ResponseBody你应该在客户端制作json对象并进入服务器这样的@RequestBody className className,我认为json方法在客户端花费太多时间进行开发,特别是在Ajax客户端的Spring没有任何能力,所以对于Ajax,我更喜欢使用thymleaf片段加载而不是jquery AJAX,在这种方法中你甚至可以使用Thymleaf对象返回命令地形。 但你的问题1 - 如果你发送json使用@RequestBody并得到这样的模型:

@RequestMapping(value = "/", method = RequestMethod.POST)
public ResponseEntity<Car> update(@RequestBody Car car) {
    ...
}

@ResponseBody只支持jackson自动后备对象所以你应该只发送回来的对象,但是你可以使用Response Entity发回ajax方法的状态,它是html的数据和状态在int中的包装器:

return new ResponseEntity<Car>(car, HttpStatus.OK);

 return new ResponseEntity("done", HttpStatus.OK);

2 - 如果使用jquery完成功能将获得200 201和其他成功值

完成后你可以获得数据
.done(function(data) {
  alert( "$.get succeeded" ); });

3-一般来说,数据是你应该预约的json列表,并将每个项目作为json对象并按点开item.prop