我使用Datatables为我的数据构建表。
我将服务器端[Java]的JSON响应传递给JSP,并使用Datatables js使用相同的数据在JSP中构建表。
If I pass 100 records, Datatables automatically provides facility to paginate and scroll through the results. But in my case, I always get only 20 records and when I user click on next page, I should call the localServlet to fetch fresh JSON response for next 20records.
那么我如何配置Datatable以便在使用分页函数时,调用AJAX资源并获取数据并绘制它。
答案 0 :(得分:1)
http://datatables.net/release-datatables/examples/data_sources/server_side.html
有一个示例然而代码是PHP。但是看一下它会看到它使用的请求参数是iDisplayStart
和iDisplayLength
您必须在服务器端java中重新实现它。
下面是我使用的一些代码(使用条纹)
Long count = (Long) getContext().getRequest().getSession(true).getAttribute("xbcount");
if (count == null) {
count = histDao.getCount();
getContext().getRequest().getSession(true).setAttribute("xbcount", count);
}
DataTableRes res = new DataTableRes (getsEcho(), count, count);
int rowStartIdxAndCount[] = {getiDisplayStart(), getiDisplayLength()};
List<HistoryUint> list = histDao.findAll(rowStartIdxAndCount);
和DAO
public List<HistoryUint> findAll(final int... rowStartIdxAndCount) {
EntityManagerHelper.log("finding all HistoryUint instances",
Level.INFO, null);
try {
final String queryString = "select model from HistoryUint model";
Query query = getEntityManager().createQuery(queryString);
if (rowStartIdxAndCount != null && rowStartIdxAndCount.length > 0) {
int rowStartIdx = Math.max(0, rowStartIdxAndCount[0]);
if (rowStartIdx > 0) {
query.setFirstResult(rowStartIdx);
}
if (rowStartIdxAndCount.length > 1) {
int rowCount = Math.max(0, rowStartIdxAndCount[1]);
if (rowCount > 0) {
query.setMaxResults(rowCount);
}
}
}
return query.getResultList();
} catch (RuntimeException re) {
EntityManagerHelper.log("find all failed", Level.SEVERE, re);
throw re;
}
}