2015-02-24 4 views
1

Я использую Spring Boot с Thymeleaf, и теперь я хочу добавить Dandelion datatables, но это не сработает.Spring Boot + 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 и сконфигурированные следующие бобы:

@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 
 
\t xmlns:th="http://www.thymeleaf.org" 
 
\t xmlns:ddl="http://github.com/dandelion"> 
 
<head> 
 
\t <link type="text/css" href="/stylesheets/dataTables.css" media="screen" rel="stylesheet" /> 
 
\t <script src="/javascripts/vendor/jquery191.js" type="text/javascript"></script> 
 
\t <script src="/javascripts/vendor/dataTables.js" type="text/javascript"></script> 
 
</head> 
 
<body> 
 
\t <br/> 
 
\t <table id="myTableId" ddl:table="true" ddl:url="@{/clientes}"> 
 
\t <thead> 
 
\t  <tr> 
 
\t   <th ddl:property="telefone">Telefone</th> 
 
\t   <th ddl:property="nome">Nome</th> 
 
\t  </tr> 
 
\t </thead> 
 
\t </table> 
 
</body> 
 
</html>

Я думаю, что сервлет Одуванчика не называется. Пространство имен не обрабатывается. enter image description here

ответ

8

Существует несколько ошибок. Большинство из них такие же, как и я, когда я впервые использовал таблицы данных одуванчика. :)

Я пишу полные простые примеры для каждого из приведенных ниже кодов для ссылки на кого-либо в будущем. Поэтому убедитесь, что вы добавили только недостающие в свой проект.

Сначала добавьте обе эти зависимости к вашему 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> 

Затем добавьте эти конфигурации. Вы должны создать Бобы для диалектов. Я думаю, что вы пропустили ..

@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, который возвращает 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; 
    } 
} 
+0

Вы правы! Огромное спасибо. – leonardoborges

+0

Я последовал за этим и получил почти все, чтобы работать, за исключением того, что в DataTables отображается только «Обработка». Я получил данные без проблем, но это не отражается в datatable. Он просто отображает «Обработка». – Incognito

+0

Можете ли вы проверить ответ, который вы получаете от сервера, из запроса ajax. Может быть, это дает ошибку. Проверьте его на вкладке сети на консоли хром при загрузке страницы. –