0
我想创建一个元数据存储使用web gui搜索数据。该应用程序是在我的spring应用程序中使用ajax和datatables构建的。Ajax发布弹簧mvc控制器刷新数据表
背景:
的搜索区域,如下所示:
====================================================================
= Start Date = Table search[ ] =
= ___________________ = ------------------------------------- =
= |2012-12-11 09:24:03| = - - =
= = - - =
= Stop Date = - - =
= ___________________ = - - =
= |2012-12-11 09:24:40| = - - =
= = - - =
= Duration > = - - =
= ___________________ = - - =
= | 00:4:40 | = - - =
= = - - =
= ___________________ = - - =
= | Search | = ------------------------------------- =
= = showing 1 of 2000 entries Page 1 =
====================================================================
Search.js
var table;
var searchpage = document.getElementsByTagName('base')[3].href;
searchRecording=function()
{
var startDate = $('#startDate').data('date');
var stopDate = $('#stopDate').data('date');
var duration = $('#duration').data('date');
$.ajax({
"type": 'POST',
"url": searchpage,
"data": JSON.stringify({
"startDate": startDate,
"stopDate": stopDate,
"duration": duration,
}),
success : function(response) {
alert(response);
},
error : function(e) {
alert('Error: ' + e);
},
contentType: "application/json",
dataType: "json"
});
}
window.searchBtn.onclick = function()
{
return function()
{
searchRecording();
}
}();
var searchBtn = document.getElementById("searchBtn");
table = $('#table').DataTable({
"bProcesing" : true,
"bServerSide" : true,
"bLenthChange" : false,
"lengthMenu": [[10, 15, 20, 25, 50], [10, 15, 20, 25, 50]],
"iDisplayLength" : 10,
"iDisplayStart": 0,
"sEcho":1,
"sAjaxSource":searchpage,
"fnServerData": function(searchpage, aoData, fnCallback)
{
$.ajax({
"dataType" : 'json',
"type" : "POST",
"url" : searchpage,
"data" : aoData,
"success" : fnCallback
});
},
"columns": [
{ data: "id" },
{ ....Other Columns.... } ,
]
});
SearchController.java(控制器)
@RequestMapping(value = "/searchpage", method = RequestMethod.POST, produces = "application/json")
public @ResponseBody String showRecordings(
@RequestParam (required=true) int sEcho,
@RequestParam (required=true) int iDisplayStart,
@RequestParam (required=true) int iDisplayLength
)
{
System.out.print(sEcho+" ");
System.out.print(iDisplayStart+" ");
System.out.println(iDisplayLength+" ");
//String startDate = (String) data.get("startDate");
//String stopDate = (String) data.get("stopDate");
//String duration = (String) data.get("duration");
DataTablesTO<Rec> dt = new DataTablesTO<Rec>();
List<Rec> recs = recordingsService.getAllRecs(iDisplayStart, iDisplayLength);
Long size = recordingsService.getAllRecsSize();
dt.setAaData(recs); // This is the dataset reponse to client
dt.setiTotalDisplayRecords(size.intValue()); // the total data in db for datatables to calculate page no. and position
dt.setiTotalRecords(size.intValue()); // the total data in db for datatables to calculate page no.
dt.setsEcho(sEcho);
return toJson(dt);
}
private String toJson(DataTablesTO<?> dt)
{
ObjectMapper mapper = new ObjectMapper();
try
{
return mapper.writeValueAsString(dt);
}
catch (JsonProcessingException e)
{
e.printStackTrace();
return null;
}
}
search.jsp的
表单包含引导datetimepickers并提交表单的按钮
<button id="searchBtn" class="btn btn-primary" type="button">Search</button>
问题:
如果能帮助我了解如何我会gratefult我应该将表格连接到表格吗?举例来说,如果我按搜索按钮开始日期和结束日期被发送到控制器,控制器搜索数据,并将结果返回到正在使用AJAX
- 是我的做法正确的自动刷新表?
- 我的代码中是否有多余的部分?
- 我该如何将日期值传递给控制器?
- 我按下搜索按钮时应该如何传递数据表初始值?
在我收到以下错误的时刻:
org.springframework.web.bind.MissingServletRequestParameterException: Required int parameter 'sEcho' is not present
谁能帮助?
感谢
谢谢,我明白服务器端,但我没有完全得到JavaScript方面。我怎样才能把多个变量,比如'sEcho','iDisplayStart','iDisplayLength'放在aoData对象中。 – QGA
如何触发“fnServerData”以使用ajax请求进行更新?我创建了一个'searchRecording'函数来发送一个ajax请求,但是我仍然没有在你的javascript代码中获得完整的图片 – QGA
。该属性应该是你想发送的。在服务器端代码中创建一个具有相同结构和属性名称的java对象,并告诉您的方法期望来自客户端的这种类型的数据 – suvartheec