一开始用@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表格插件则是一个强大的前端工具,可以方便地实现这些功能。下面将详细介绍这个集成方案的相关知识点。 1. **Spring Boot** Spring ...
弹簧启动数据表该项目是使用的示例Spring Boot项目怎么跑mvn clean spring-boot:run 然后打开特征Datahome是在文件home.js中定义的,具有用户类的列名称...UserRestController处理DataTables插件发送的Ajax请求@Rest
datatables+springmvc+bootstrap实现分页,包含数据库 Datatables是一款jquery表格插件。它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能。 分页,即时搜索和排序 几乎支持任何数据源:DOM, ...
在本项目中,“Datatables实现多选框与AJAX返回数据 JAVA版”是针对Java开发者的,它涉及到使用Datatables与Spring MVC框架结合,通过AJAX技术动态加载并处理服务器端的数据,同时实现表格内的多选框功能,以提升...
SSM整合Datatables实例Demo是将SpringMVC、Spring和MyBatis这三大流行Java Web框架集成,并结合Datatables插件实现数据展示和交互的示例项目。这个Demo旨在帮助开发者理解如何在实际项目中有效地利用这些技术进行...
在本文中,我们将深入探讨如何在DataTables中实现行分组信息的展开与折叠功能。DataTables是一款强大的JavaScript库,用于增强HTML表格的功能,提供排序、过滤、分页等多种高级特性。行分组功能允许用户将相关的数据...
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,...
- **分页**:Datatables可以自动处理大量数据,通过分页功能将数据分块显示,提高页面加载速度。 - **数据加载**:支持服务器端处理和客户端处理两种模式,可根据数据量选择合适的加载方式。 - **自定义列**:...
在这个"datatables java后台解析http请求参数demo"中,我们将探讨如何利用Java技术在后台处理来自前端DataTable库的HTTP请求参数。DataTable是一款功能强大的jQuery插件,常用于实现动态、可排序、可搜索的数据表格...
在Laravel中集成datatables,可以提升后端数据处理的效率,并为前端用户提供流畅的交互体验。 1. **安装laravel4-datatables-package** 首先,你需要通过Composer来安装这个包。在命令行中运行以下命令: ``` ...
这将允许您处理DataTables发送的针对Spring @RestController页面上每条信息绘制的Ajax请求(即,在分页,排序,搜索等时)。 对于MongoDB副本,请参阅 。 例子: @RestControllerpublic class UserRestController {...
2. **初始化DataTables**:通过JavaScript代码对表格进行初始化,设置分页、排序、搜索等参数。 ```javascript $(document).ready(function() { $('#example').DataTable({ serverSide: true, // 如果使用服务器...
在Spring MVC中,控制器需要处理请求,返回JSON格式的数据供DataTables使用。这通常涉及编写一个处理请求的方法,返回包含表格数据的模型或视图。 9. JSON格式:返回的JSON数据应包含`data`字段,其中包含了表格行...
在IT行业中,尤其是在网页开发领域,数据展示是一个重要的任务,而`DataTables`是一个非常流行的JavaScript库,用于处理和展示动态表格数据。本文件“datatables固定头与滚动条适配文件”着重解决了一个特定的问题,...
开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min...
在“datatables_demo”中,可能包含了与后端接口的交互,实现数据的动态加载和更新,这对于实时数据展示非常有用。 除此之外,Datatables还提供了丰富的样式和主题选择,以适应不同的设计需求。在“datatables_demo...
DataTables支持多种语言,你可以通过设置`language`属性实现: ```javascript $('#example').DataTable({ language: { url: '//cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/Chinese.json' // 获取中文语言包...
在本示例中,"表格 demo datatables 回调" 是一个利用 Datatables 和 Bootstrap 框架实现的交互式表格演示。Datatables 是一个强大的JavaScript库,用于增强HTML表格的功能,而Bootstrap则是一个流行的前端开发框架...