我必须从控制器返回一个员工列表以响应jQuery AJAX请求。我该怎么办呢?
我的控制器:
@RequestMapping("phcheck")
public ModelAndView pay(@RequestParam("empid") int empid, String fdate, String tdate) {
ModelAndView mav = new ModelAndView("phcheck");
List<Employee> employees = entityManager.createQuery(
"SELECT e FROM Employee e WHERE e.empId = " + empid, Employee.class)
.getResultList();
mav.addObject("employees", employees); // I need this list of employee in AJAX
return mav;
}
相关视图中的AJAX代码:
$(document).ready(function () {
$("#empid").change(function () {
if ($("#fdate").val() != "" && $("#tdate").val() != "" && $("#empid").val() != "") {
jQuery.ajax({
url: "phcheck.htm?empid=" + $("#empid").val() +
"&&fdate=" + $("#fdate").val() +
"&&tdate=" + $("#tdate").val(),
success: function (data) {
alert(data + "success");
},
error: function (data) {
alert(data + "error");
}
});
} else {
alert("Please fill the from date and to date or select the employee id");
$("#empid .option").attr("selected", "selected");
}
});
});
提前谢谢。
答案 0 :(得分:16)
我需要ajax中的员工列表
在春天,您需要对象序列化,反序列化和消息转换。在这种情况下,您需要使用@RequestBody
和@ResponseBody
注释控制器处理程序方法。
其中:
在您的情况下,您需要JSON类型,您必须将@ResponseBody
添加到方法签名或方法上方,并生成和使用可选的,如:
@RequestMapping(value="phcheck", method=RequestMethod.GET
produces="application/json")
public @ResponseBody List<Employee> pay(@RequestParam("empid") int empid, String fdate, String tdate) {
//get your employee list here
return empList;
}
并在AJAX中使用呼叫:
contentType: 'application/json'
属性说明您要发送的数据类型。和dataType: json
属性告诉jquery将接收哪种内容类型的响应。在您的情况下contentType: 'application/json'
不需要,默认一个,即'application/x-www-form-urlencoded; charset=UTF-8'
就足够了。
你可以收到AJAX成功的员工名单,迭代它就像:
success: function (data) {
$.each(data, function(index, currEmp) {
console.log(currEmp.name); //to print name of employee
});
},
<小时/> 注意: Jackson mapper或任何其他映射器应该在buildpath上可用,以便进行JSON序列化和反序列化。
另见:
答案 1 :(得分:1)
@RequestMapping(value = "phcheck", produces = "application/json")
@ResponseBody
public ModelAndView pay(@RequestParam("empid") int empid, @RequestParam("fdate") String fdate, @RequestParam("tdate") String tdate) {
return entityManager.createQuery("select e from Employee e where e.empId="+empid, Employee.class).getResultList();
}
url:"phcheck.htm?empid="+$("#empid").val()+"&fdate="+$("#fdate").val()+"&tdate="+$("#tdate").val()
在Spring MVC中,您必须注册MappingJackson2HttpMessageConverter就像完成here
答案 2 :(得分:1)
ModelAndView意味着您计划渲染视图,而不是。要返回对象,请使用@ResponseBody注释:
@RequestMapping("phcheck")
public @ResponseBody List<Employee> pay(@RequestParam("empid") int empid, String fdate, String tdate) {
return entityManager.createQuery("select e from Employee e where e.empId="+empid, Employee.class).getResultList();
}
此外,您应该更加小心处理查询。您的查询是不安全的,并允许SQL注入。例如,如果某人使用empId =“'15'或'1'='1'”调用您的方法,那么它将返回整个员工列表。
答案 3 :(得分:0)
Make the method as @ResponseBody Type in the controller and in the ajax take the List from success function.
Put the Jackson Mapper file in Pom.xml file if using Maven