数据表AJAX数据源和自定义分页操作

时间:2013-12-20 02:06:06

标签: javascript jquery ajax datatable pagination

我使用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资源并获取数据并绘制它。

1 个答案:

答案 0 :(得分:1)

http://datatables.net/release-datatables/examples/data_sources/server_side.html

有一个示例

然而代码是PHP。但是看一下它会看到它使用的请求参数是iDisplayStartiDisplayLength

您必须在服务器端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;
    }
}