`
dwangel
  • 浏览: 266468 次
社区版块
存档分类
最新评论

实现Spring的HandlerMethodArgumentResolver接口处理Datatables参数

阅读更多
一开始用@ModelAttribute标签来自动映射类,不符合 spring bean的映射规则。
研究了代码,想通过 自定义 RequestMappingHandlerAdapter子类处理,但是这样就不能用 <mvc:annotation-driven> 标签了。后来发现<mvc:annotation-driven> 里面可以自定义类型解析:<mvc:argument-resolvers>
这样就简单了:
数据类:
public class DtReq {
  private Integer draw;
  private Integer start = 0;
  private Integer length = 30;
  private List<DtReqCol> columns;
  private String searchValue;
  private String searchIndex;
  private Map<String, String> search;

  public DtReq() {
    columns = new ArrayList<>();
    search = new HashMap<>();
  }

  public Integer getDraw() {
    return draw;
  }

  public void setDraw(Integer draw) {
    this.draw = draw;
  }

  public Integer getStart() {
    return start;
  }

  public void setStart(Integer start) {
    this.start = start;
  }

  public Integer getLength() {
    return length;
  }

  public void setLength(Integer length) {
    this.length = length;
  }

  public List<DtReqCol> getColumns() {
    return columns;
  }

  public void setColumns(List<DtReqCol> columns) {
    this.columns = columns;
  }

  public Map<String, String> getSearch() {
    return search;
  }

  public void setSearch(Map<String, String> search) {
    this.search = search;
  }

  public String getSearchValue() {
    return searchValue;
  }

  public void setSearchValue(String searchValue) {
    this.searchValue = searchValue;
  }

  public String getSearchIndex() {
    return searchIndex;
  }

  public void setSearchIndex(String searchIndex) {
    this.searchIndex = searchIndex;
  }
}
public class DtReqCol {
  private String data;
  private String name;
  private Boolean searchable;
  private Boolean orderable;
  private String searchValue;
  private Boolean searchRegex;

  public DtReqCol() {
  }

  public String getData() {
    return data;
  }

  public void setData(String data) {
    this.data = data;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public Boolean getSearchable() {
    return searchable;
  }

  public void setSearchable(Boolean searchable) {
    this.searchable = searchable;
  }

  public Boolean getOrderable() {
    return orderable;
  }

  public void setOrderable(Boolean orderable) {
    this.orderable = orderable;
  }

  public String getSearchValue() {
    return searchValue;
  }

  public void setSearchValue(String searchValue) {
    this.searchValue = searchValue;
  }

  public Boolean getSearchRegex() {
    return searchRegex;
  }

  public void setSearchRegex(Boolean searchRegex) {
    this.searchRegex = searchRegex;
  }
}

public class DtReqResolver implements HandlerMethodArgumentResolver {
  @Override
  public boolean supportsParameter(MethodParameter parameter) {
    return DtReq.class.equals(parameter.getParameterType());
  }

  @Override
  public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
    DtReq req = new DtReq();
    req.setDraw(getInteger("draw", webRequest));
    req.setStart(getInteger("start",0, webRequest));
    req.setLength(getInteger("length",30, webRequest));
    Iterator<String> itName = webRequest.getParameterNames();

    String lastName = "startColumn";
    while (itName.hasNext()) {
      String name = itName.next();
      if (name.startsWith(lastName)) {
        continue;
      }
      if (name.startsWith("columns[")) {
        int p = name.indexOf(']');
        String colName = name.substring(0, p+1);
        DtReqCol col = new DtReqCol();
        col.setData(webRequest.getParameter(colName+"[data]"));
        col.setName(webRequest.getParameter(colName+"[name]"));
        col.setSearchable(Boolean.parseBoolean(webRequest.getParameter(colName+"[searchable]")));
        col.setOrderable(Boolean.parseBoolean(webRequest.getParameter(colName+"[orderable]")));
        col.setSearchValue(webRequest.getParameter(colName+"[search][value]"));
        col.setSearchRegex(Boolean.parseBoolean(webRequest.getParameter(colName+"[search][regex]")));
        req.getColumns().add(col);
        lastName = colName;
      } else if ("search[value]".equals(name)) {
        req.setSearchValue(webRequest.getParameter(name));
      } else if ("search[regex]".equals(name)) {
        req.setSearchIndex(webRequest.getParameter(name));
      }
    }
    return req;
  }

  private Integer getInteger(String draw, NativeWebRequest webRequest) {
    String p = webRequest.getParameter(draw);
    return p!=null ? Integer.parseInt(p):null;
  }
  private Integer getInteger(String draw, Integer defaultV, NativeWebRequest webRequest) {
    String p = webRequest.getParameter(draw);
    return p!=null ? Integer.parseInt(p):defaultV;
  }
}

最后在xml中注册 argument-resolver:
<mvc:annotation-driven>
    <mvc:argument-resolvers>
      <bean class="DtReqResolver" />
    </mvc:argument-resolvers>
</mvc:annotation-driven>


使用时,直接将 DataTableInput作为controller的参数即可,不需要加任何 annotation.
最后附Jquery data tables 参数例子:

draw:1
columns[0][data]:id
columns[0][name]:
columns[0][searchable]:true
columns[0][orderable]:false
columns[0][search][value]:
columns[0][search][regex]:false
columns[1][data]:username
columns[1][name]:
columns[1][searchable]:true
columns[1][orderable]:false
columns[1][search][value]:
columns[1][search][regex]:false
columns[2][data]:nickname
columns[2][name]:
columns[2][searchable]:true
columns[2][orderable]:false
columns[2][search][value]:
columns[2][search][regex]:false
columns[3][data]:id
columns[3][name]:
columns[3][searchable]:true
columns[3][orderable]:false
columns[3][search][value]:
columns[3][search][regex]:false
start:0
length:10
search[value]:
search[regex]:false
分享到:
评论

相关推荐

    Spring Boot+MybatisPlus使用JQuery DataTables表格插件展示数据、实现分页和模糊查询等功能

    Spring Boot结合MybatisPlus框架提供了高效的数据处理能力,而JQuery DataTables表格插件则是一个强大的前端工具,可以方便地实现这些功能。下面将详细介绍这个集成方案的相关知识点。 1. **Spring Boot** Spring ...

    spring-boot-datatables:Spring Data JPA扩展可与出色的jQuery插件DataTables(http

    弹簧启动数据表该项目是使用的示例Spring Boot项目怎么跑mvn clean spring-boot:run 然后打开特征Datahome是在文件home.js中定义的,具有用户类的列名称...UserRestController处理DataTables插件发送的Ajax请求@Rest

    datatables+springmvc+bootstrap实现分页

    datatables+springmvc+bootstrap实现分页,包含数据库 Datatables是一款jquery表格插件。它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能。 分页,即时搜索和排序 几乎支持任何数据源:DOM, ...

    Datatables实现多选框与AJAX返回数据 JAVA版

    在本项目中,“Datatables实现多选框与AJAX返回数据 JAVA版”是针对Java开发者的,它涉及到使用Datatables与Spring MVC框架结合,通过AJAX技术动态加载并处理服务器端的数据,同时实现表格内的多选框功能,以提升...

    ssm整合datatables实例Demo

    SSM整合Datatables实例Demo是将SpringMVC、Spring和MyBatis这三大流行Java Web框架集成,并结合Datatables插件实现数据展示和交互的示例项目。这个Demo旨在帮助开发者理解如何在实际项目中有效地利用这些技术进行...

    DataTables(二) —— 行分组信息展开与折叠的功能实现

    在本文中,我们将深入探讨如何在DataTables中实现行分组信息的展开与折叠功能。DataTables是一款强大的JavaScript库,用于增强HTML表格的功能,提供排序、过滤、分页等多种高级特性。行分组功能允许用户将相关的数据...

    毕业设计&课设_Spring Data JPA 与 DataTables 集成扩展项目,含使用说明.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,...

    datatables

    - **分页**:Datatables可以自动处理大量数据,通过分页功能将数据分块显示,提高页面加载速度。 - **数据加载**:支持服务器端处理和客户端处理两种模式,可根据数据量选择合适的加载方式。 - **自定义列**:...

    dataTables java后台解析http请求参数demo

    在这个"datatables java后台解析http请求参数demo"中,我们将探讨如何利用Java技术在后台处理来自前端DataTable库的HTTP请求参数。DataTable是一款功能强大的jQuery插件,常用于实现动态、可排序、可搜索的数据表格...

    Laravel开发-datatables

    在Laravel中集成datatables,可以提升后端数据处理的效率,并为前端用户提供流畅的交互体验。 1. **安装laravel4-datatables-package** 首先,你需要通过Composer来安装这个包。在命令行中运行以下命令: ``` ...

    spring-data-jpa-datatables:Spring Data JPA扩展可与出色的jQuery插件DataTables(http

    这将允许您处理DataTables发送的针对Spring @RestController页面上每条信息绘制的Ajax请求(即,在分页,排序,搜索等时)。 对于MongoDB副本,请参阅 。 例子: @RestControllerpublic class UserRestController {...

    JQuery DataTables示例,包含分页、拖拽、导出

    2. **初始化DataTables**:通过JavaScript代码对表格进行初始化,设置分页、排序、搜索等参数。 ```javascript $(document).ready(function() { $('#example').DataTable({ serverSide: true, // 如果使用服务器...

    [简单]DataTables简单示例

    在Spring MVC中,控制器需要处理请求,返回JSON格式的数据供DataTables使用。这通常涉及编写一个处理请求的方法,返回包含表格数据的模型或视图。 9. JSON格式:返回的JSON数据应包含`data`字段,其中包含了表格行...

    datatables固定头与滚动条适配文件

    在IT行业中,尤其是在网页开发领域,数据展示是一个重要的任务,而`DataTables`是一个非常流行的JavaScript库,用于处理和展示动态表格数据。本文件“datatables固定头与滚动条适配文件”着重解决了一个特定的问题,...

    开发工具 dataTables.bootstrap.min

    开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min...

    datatables_demo

    在“datatables_demo”中,可能包含了与后端接口的交互,实现数据的动态加载和更新,这对于实时数据展示非常有用。 除此之外,Datatables还提供了丰富的样式和主题选择,以适应不同的设计需求。在“datatables_demo...

    jquery-dataTables简单实例

    DataTables支持多种语言,你可以通过设置`language`属性实现: ```javascript $('#example').DataTable({ language: { url: '//cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/Chinese.json' // 获取中文语言包...

    表格 demo datatables 回调

    在本示例中,"表格 demo datatables 回调" 是一个利用 Datatables 和 Bootstrap 框架实现的交互式表格演示。Datatables 是一个强大的JavaScript库,用于增强HTML表格的功能,而Bootstrap则是一个流行的前端开发框架...

Global site tag (gtag.js) - Google Analytics