一开始用@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项目怎么跑mvn clean spring-boot:run 然后打开特征Datahome是在文件home.js中定义的,具有用户类的列名称...UserRestController处理DataTables插件发送的Ajax请求@Rest
datatables+springmvc+bootstrap实现分页,包含数据库 Datatables是一款jquery表格插件。它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能。 分页,即时搜索和排序 几乎支持任何数据源:DOM, ...
Spring Boot+MybatisPlus使用JQuery DataTables表格插件展示数据、实现分页和模糊查询等功能
这将允许您处理DataTables发送的针对Spring @RestController页面上每条信息绘制的Ajax请求(即,在分页,排序,搜索等时)。 对于MongoDB副本,请参阅 。 例子: @RestControllerpublic class UserRestController {...
ssm整合datatables实例Demo,springMVC spring mybatis datatables
DataTables行分组的展开与折叠功能的实现
datatables 插件
开发工具 jquery.dataTables.min开发工具 jquery.dataTables.min开发工具 jquery.dataTables.min开发工具 jquery.dataTables.min开发工具 jquery.dataTables.min开发工具 jquery.dataTables.min开发工具 jquery....
dataTables java后台解析http请求参数demo,解析datatableshttp多维数组
Datatables实现多选框与AJAX返回数据 JAVA版
开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min开发工具 dataTables.bootstrap.min...
jquery 表格分页处理插件 DataTables 官方最新版本:1.62 作者:Allan Jardine 官網:http://sprymedia.co.uk/article/DataTables 展示:http://sprymedia.co.uk/article/DataTables 一个中文使用案例: ...
使用方法: ... ... ...也可使用Eclipse直接导入此项目文件...分页栏增加跳页功能(直接修改了dataTables.bootstrap.js和dataTables.bootstrap.css) CSS实现单元格超长文字省略号显示 CSS实现单元格连续纯字母数字强制换行显示
datatables增删改查,行内编辑等官方源码实例 冒泡编辑,多行编辑、删除,例子超多,官方的实现代码非常精简,可直接引用 datatables.dll,减少了非常多的页面脚本 带数据库SQL文件 vs2015工程
4.3.6.IFactoryObject接口的其它实现 4.3.6.1.Log4Net 4.3.7.使用depends-on 4.3.8.自动装配协作对象 4.3.9.检查依赖项 4.4.类型转换 4.4.1.枚举类型的转换 4.4.2.内置的类型转换器 4.4.3.自定义类型转换器 4.4.3.1....
spring-data-jpa-datatables-sample 该项目是使用的示例Spring Boot项目怎么跑mvn spring-boot:run然后打开特征Datahome是在文件home.js中定义的,具有用户类的列名称匹配属性: $(document).ready(function() {var ...
用于dataTables 使用dataTables添加行辅助按钮如 修改/删除.
前后端基于json进行交互,接口通过JWT无状态token进行权限校验,使用redis或者数据库进行token缓存,接口完全采用Restful的风格,实现按钮级权限控制,可以作为开发项目的脚手架,做为基础项目。 该版本为mybatis版...
1,这个项目是strut2.0 + hibernate3.0 + jquery.datatables+mysql 5.0实现的 hibernate分页(无排序,搜索,仅仅分页显示),服务器端分页在datatables上展现,有关 datatables的知识请关注它的官网...