Spring Boot + Thymeleaf + Dandelion 配置不起作用
Spring Boot + Thymeleaf + Dandelion configuration not working
我正在使用 Spring Boot with Thymeleaf,现在我想添加 Dandelion 数据表,但它不起作用。
这是我的 Maven 依赖项:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Dandelion -->
<dependency>
<groupId>com.github.dandelion</groupId>
<artifactId>datatables-thymeleaf</artifactId>
<version>0.10.1</version>
</dependency>
我正在遵循本指南 http://dandelion.github.io/dandelion/docs/installation/thymeleaf.html 并配置了以下 bean:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public FilterRegistrationBean dandelion() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new DandelionFilter());
registrationBean.addUrlPatterns("/*");
return registrationBean;
}
@Bean
public ServletRegistrationBean dandelionServlet() {
ServletRegistrationBean registrationBean = new ServletRegistrationBean();
registrationBean.setServlet(new DandelionServlet());
registrationBean.addUrlMappings("/dandelion/*");
return registrationBean;
}
@Bean
public ServletContextTemplateResolver defaultTemplateResolver() {
ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setTemplateMode("HTML5");
resolver.setPrefix("/WEB-INF/templates/");
resolver.setSuffix(".html");
resolver.setCharacterEncoding("UTF-8");
resolver.setCacheable(false);
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(resolver);
engine.addDialect(new DataTablesDialect());
return resolver;
}
}
我做了这个 HTML 用于测试:
<!doctype html>
<html
xmlns:th="http://www.thymeleaf.org"
xmlns:ddl="http://github.com/dandelion">
<head>
<link type="text/css" href="/stylesheets/dataTables.css" media="screen" rel="stylesheet" />
<script src="/javascripts/vendor/jquery191.js" type="text/javascript"></script>
<script src="/javascripts/vendor/dataTables.js" type="text/javascript"></script>
</head>
<body>
<br/>
<table id="myTableId" ddl:table="true" ddl:url="@{/clientes}">
<thead>
<tr>
<th ddl:property="telefone">Telefone</th>
<th ddl:property="nome">Nome</th>
</tr>
</thead>
</table>
</body>
</html>
我认为没有调用蒲公英的servlet。
不处理名称空间。
有几个错误。其中大部分与我第一次使用蒲公英数据表时所做的相同。 :)
我正在为下面的每个代码编写完整的简单示例,以供将来任何人参考。因此,请确保只将缺少的添加到项目中
首先将这两个依赖项添加到您的 maven 中。 (你已经有了第一个。所以添加后面的。)
<dependency>
<groupId>com.github.dandelion</groupId>
<artifactId>datatables-thymeleaf</artifactId>
<version>0.10.1</version>
</dependency>
<dependency>
<groupId>com.github.dandelion</groupId>
<artifactId>datatables-spring3</artifactId>
<version>0.10.1</version>
</dependency>
然后添加这些配置。您必须为方言创建 Bean。我想你错过了..
@Configuration
public class DandelionConfig {
@Bean
public DandelionDialect dandelionDialect() {
return new DandelionDialect();
}
@Bean
public DataTablesDialect dataTablesDialect(){
return new DataTablesDialect();
}
@Bean
public Filter dandelionFilter() {
return new DandelionFilter();
}
@Bean
public ServletRegistrationBean dandelionServletRegistrationBean() {
return new ServletRegistrationBean(new DandelionServlet(), "/dandelion-assets/*");
}
}
视图可以是这样的
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:ddl="http://www.thymeleaf.org/dandelion"
xmlns:dt="http://www.thymeleaf.org/dandelion/datatables">
<head lang="en"></head>
<body>
<table id="myTableId"
dt:table="true"
dt:url="@{/clientes}"
dt:serverside="true"
dt:processing="true">
<thead>
<tr>
<th dt:property="telefone">Telefone</th>
<th dt:property="nome">Nome</th>
</tr>
</thead>
</table>
</body>
</html>
这里您使用的是服务器端处理。这需要您的控制器在 /clientes
上有一个映射,其中 returns DatatablesResponse
@Override
@RequestMapping(value = "/clientes")
@ResponseBody
public DatatablesResponse<MyObject> data(HttpServletRequest request){
List<MyObject> myObjectList = ... //logic to fetch a list of objects
DatatablesCriterias criterias = DatatablesCriterias.getFromRequest(request);
DataSet<MyObject> dataSet = new DataSet<>(myObjectList, (long)myObjectList.size(), (long)myObjectList.size());
return DatatablesResponse.build(dataSet, criterias);
}
MyObject 是您传递给蒲公英数据表的对象
public class MyObject {
private String telefone;
private String nome;
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
我正在使用 Spring Boot with Thymeleaf,现在我想添加 Dandelion 数据表,但它不起作用。
这是我的 Maven 依赖项:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Dandelion -->
<dependency>
<groupId>com.github.dandelion</groupId>
<artifactId>datatables-thymeleaf</artifactId>
<version>0.10.1</version>
</dependency>
我正在遵循本指南 http://dandelion.github.io/dandelion/docs/installation/thymeleaf.html 并配置了以下 bean:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public FilterRegistrationBean dandelion() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new DandelionFilter());
registrationBean.addUrlPatterns("/*");
return registrationBean;
}
@Bean
public ServletRegistrationBean dandelionServlet() {
ServletRegistrationBean registrationBean = new ServletRegistrationBean();
registrationBean.setServlet(new DandelionServlet());
registrationBean.addUrlMappings("/dandelion/*");
return registrationBean;
}
@Bean
public ServletContextTemplateResolver defaultTemplateResolver() {
ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setTemplateMode("HTML5");
resolver.setPrefix("/WEB-INF/templates/");
resolver.setSuffix(".html");
resolver.setCharacterEncoding("UTF-8");
resolver.setCacheable(false);
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(resolver);
engine.addDialect(new DataTablesDialect());
return resolver;
}
}
我做了这个 HTML 用于测试:
<!doctype html>
<html
xmlns:th="http://www.thymeleaf.org"
xmlns:ddl="http://github.com/dandelion">
<head>
<link type="text/css" href="/stylesheets/dataTables.css" media="screen" rel="stylesheet" />
<script src="/javascripts/vendor/jquery191.js" type="text/javascript"></script>
<script src="/javascripts/vendor/dataTables.js" type="text/javascript"></script>
</head>
<body>
<br/>
<table id="myTableId" ddl:table="true" ddl:url="@{/clientes}">
<thead>
<tr>
<th ddl:property="telefone">Telefone</th>
<th ddl:property="nome">Nome</th>
</tr>
</thead>
</table>
</body>
</html>
我认为没有调用蒲公英的servlet。
不处理名称空间。
有几个错误。其中大部分与我第一次使用蒲公英数据表时所做的相同。 :)
我正在为下面的每个代码编写完整的简单示例,以供将来任何人参考。因此,请确保只将缺少的添加到项目中
首先将这两个依赖项添加到您的 maven 中。 (你已经有了第一个。所以添加后面的。)
<dependency>
<groupId>com.github.dandelion</groupId>
<artifactId>datatables-thymeleaf</artifactId>
<version>0.10.1</version>
</dependency>
<dependency>
<groupId>com.github.dandelion</groupId>
<artifactId>datatables-spring3</artifactId>
<version>0.10.1</version>
</dependency>
然后添加这些配置。您必须为方言创建 Bean。我想你错过了..
@Configuration
public class DandelionConfig {
@Bean
public DandelionDialect dandelionDialect() {
return new DandelionDialect();
}
@Bean
public DataTablesDialect dataTablesDialect(){
return new DataTablesDialect();
}
@Bean
public Filter dandelionFilter() {
return new DandelionFilter();
}
@Bean
public ServletRegistrationBean dandelionServletRegistrationBean() {
return new ServletRegistrationBean(new DandelionServlet(), "/dandelion-assets/*");
}
}
视图可以是这样的
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:ddl="http://www.thymeleaf.org/dandelion"
xmlns:dt="http://www.thymeleaf.org/dandelion/datatables">
<head lang="en"></head>
<body>
<table id="myTableId"
dt:table="true"
dt:url="@{/clientes}"
dt:serverside="true"
dt:processing="true">
<thead>
<tr>
<th dt:property="telefone">Telefone</th>
<th dt:property="nome">Nome</th>
</tr>
</thead>
</table>
</body>
</html>
这里您使用的是服务器端处理。这需要您的控制器在 /clientes
上有一个映射,其中 returns DatatablesResponse
@Override
@RequestMapping(value = "/clientes")
@ResponseBody
public DatatablesResponse<MyObject> data(HttpServletRequest request){
List<MyObject> myObjectList = ... //logic to fetch a list of objects
DatatablesCriterias criterias = DatatablesCriterias.getFromRequest(request);
DataSet<MyObject> dataSet = new DataSet<>(myObjectList, (long)myObjectList.size(), (long)myObjectList.size());
return DatatablesResponse.build(dataSet, criterias);
}
MyObject 是您传递给蒲公英数据表的对象
public class MyObject {
private String telefone;
private String nome;
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}