当使用Jquery Ajax Call为具有该名称的model参数传递任何内容时,Model Parameter的数据类型是什么?
考虑以下Jquery Ajax Post操作:
$.ajax({
url: url,
data: {'A':'a','B':'b'},
cache: false,
dataType: "json",
type: "POST",
success: function(data){
if(data.success==true){
alert('success');
}else if(data.success==false){
alert('Failed');
}
}
});
并遵循基于Spring注释的控制器定义
@RequestMapping(value = { "dummy" }, method = RequestMethod.POST)
public @ResponseBody HashMap<Object, Object> createDiagram(@ModelAttribute(value = "A") Object a,@ModelAttribute(value = "B") Object b,@ModelAttribute(value = "C") Object c)
{
boolean object=(c instanceof Object); // returns true;
boolean string=(c instanceof String); //returns false
//TODO: Need to check if c is null or if the value of 'C' was actually passed in Ajax Call
}
答案 0 :(得分:0)
根据您的示例,您尝试使用POST方法向服务器发送匿名javascript对象。
为了使用@ModelAttribute
注释实际绑定数据,当请求进入控制器时,您需要执行以下步骤:
在您的HTML中,您需要在输入标记,文本区域标记和其他表单标记中使用name
属性。表单中的每个“element”标记应该与您尝试使用该name属性绑定的对象内的字段匹配。
例如:
假设您有一个类User.java,并且您正在尝试将数据绑定到它:
public class User {
private String firstName;
private String lastName;
private String email;
}
所以你的表单应该包含3个带有匹配名称属性的输入标签:
<input type="text" name="firstName" />
<input type="text" name="lastName" />
<input type="text" name="email" />
现在,你的绑定实际上可以这样发生:
@RequestMapping(value = "/home", method = RequestMethod.POST)
public String goHome(@ModelAttribute User)
{
}
这是绑定问题。
现在对于 ajax ,首先需要获取HTML表单的数据。假设您的HTML表单上有myForm的id,然后:
var myData = $("#myForm").serialize();
现在,根据数据,您应该发送myData,如下所示:
$.ajax({
url: url,
data: myData,
cache: false,
dataType: "json",
type: "POST",
success: function(data){
if(data.success==true){
alert('success');
}else if(data.success==false){
alert('Failed');
}
}
});
return false;
URL应该是服务器的完整HTTP地址,如下所示:
http://localhost:8080/your_app/your_route
不要忘记在jquery ajax调用后立即返回false或任何其他值。这是完成ajax调用的正确方法。
ajax成功方法期望将任何类型的文本作为Spring的Controller的回复(更准确地说来自调度程序servlet)。
因此,在你的控制器中不要忘记使用@ResponseBody
注释,这将告诉调度程序servlet不要尝试解析视图,而是返回方法的值作为HTML主体的一部分。
因此,如果您将返回任何字符串或JSON,它们将在HTTP响应正文中发送。