Выпуск Dandelion-Core 1.1.1 с Spring5? - PullRequest
0 голосов
/ 16 июня 2019

У меня есть проект Spring IO, который я построил с использованием Spring io.spring.platform 1.0.1.RELEASE, который уже закончился.Я очень успешно использовал thymeleaf-spring4 вместе с dandelion-core 0.10.1 и dandelion-thymeleaf 0.10.1 для обработки JavaScript и CSS-зависимостей.Перенесемся на 4 года, и я пытаюсь обновить свой проект до Spring 5, либо с загрузкой пружины, либо без нее, и одним из моих препятствий было отсутствие примеров, показывающих, как настроить одуванчик с обновленными платформами spring и thymeleaf, и я вижуне был достаточно умен, чтобы заставить это работать самостоятельно.Проект одуванчика, кажется, застопорился, если не умер, без обновлений с 2015 года. http://dandelion.github.io/blog/ и https://github.com/dandelion/dandelion.Я не уверен, что это означает, что это невозможно, но пока я использовал spring4 с одуванчиком 0.10.0, я сохранил схему пространства имен контекста spring до 3.2, а образцы 1.1.1 все еще основывались на spring3.Таким образом, это может означать, что он просто никогда не обновлялся после весны 3, но может также быть и то, что некоторые другие средства обработки загрузки AMD, как будто с помощью require.js, могли сделать необходимость в сборщике одуванчиков устаревшей, и я просто не взнать

Кто-нибудь получил одуванчик для работы с spring5 и может сказать, как это должно работать или нет, есть ли другой способ обработать сложную загрузку пакета JS в визуализированные шаблоны?Насколько я помню, было невозможно использовать require.js в обычном паттерне AMD, чтобы ограничить ресурсы, загружаемые при использовании хранимых представлений тимилиф, поскольку включения должны были быть объявлены как часть заголовка.Одуванчик позаботился о зависимости и упорядочении внутри связок и собрал необходимые включенные и заказал их соответствующим образом.И хотя новое встроенное разрешение для js и css выглядит удобным https://www.baeldung.com/spring-thymeleaf-3,, оно по-прежнему не учитывает необходимость включения наборов js-библиотек.Любой совет будет принят во внимание.

Я работал над преобразованием проекта в чистый Java-конфигурацию, чтобы обойти проблемы с пространством имен XML.но я все еще получаю эту ошибку Java при попытке загрузить диалект одуванчика:

2019-07-08 16: 56: 56,898 ПРЕДУПРЕЖДЕНИЕ [RMI TCP Connection (3) -127.0.0.1] support.AbstractApplicationContext (AbstractApplicationContext.java:557) - Исключительная ситуация при инициализации контекста - отмена попытки обновления: org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем 'dandelionDialect', определенного в ресурсе пути к классу [com / srcsolutions / ecumcms / springJavaConfig / DandelionConfig / DandelionConfig.class]: не удалось создать экземпляр объекта с помощью фабричного метода;вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [com.github.dandelion.thymeleaf.dialect.DandelionDialect]: фабричный метод 'dandelionDialect' вызвал исключение;вложенным исключением является java.lang.NoSuchMethodError: org.thymeleaf.dialect.AbstractDialect: method () V не найден 2019-07-08 16: 56: 56,902 ОШИБКА [RMI TCP-соединение (3) -127.0.0.1] servlet.FrameworkServlet (FrameworkServlet.java:533) - Сбой при инициализации контекста org.springframework.beans.factory.BeanCreationException: Ошибка при создании компонента с именем 'dandelionDialect', определенным в ресурсе пути к классу [com / srcsolutions / ecumcms / springJavaConfig / DandelionConfig.classation] через экземпляр компонентазаводской метод не удался;вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [com.github.dandelion.thymeleaf.dialect.DandelionDialect]: фабричный метод 'dandelionDialect' вызвал исключение;вложенным исключением является java.lang.NoSuchMethodError: org.thymeleaf.dialect.AbstractDialect: method () V не найден в org.springframework.beans.factory.support.ConstructorResolver.instantiate (ConstructorResolver.java:6)5.1.6.RELEASE.jar: 5.1.6.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod (ConstructorResolver.java:456) ~ [spring-beans-5.1.6.RELEASE.jar: 5.1.6.RELEASE]

Мой Pom имеет: `

        <dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
    <version>3.0.4.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-conditionalcomments</artifactId>
    <version>2.1.2.RELEASE</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>nz.net.ultraq.thymeleaf</groupId>
    <artifactId>thymeleaf-spring-environment-dialect</artifactId>
    <version>0.3.0</version>
</dependency>
<dependency>
    <groupId>nz.net.ultraq.thymeleaf</groupId>
    <artifactId>thymeleaf-layout-dialect</artifactId>
    <version>2.4.1</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>com.github.dandelion</groupId>
    <artifactId>dandelion-core</artifactId>
    <version>1.1.1</version>
</dependency>
<dependency>
    <groupId>com.github.dandelion</groupId>
    <artifactId>dandelion-thymeleaf</artifactId>
    <version>1.1.1</version>
</dependency>

`

У меня есть несколько классов конфигурации: `

package com.srcsolutions.ecumcms.springJavaConfig;

import com.github.dandelion.core.web.DandelionFilter;
import com.github.dandelion.thymeleaf.dialect.DandelionDialect;
import nz.net.ultraq.thymeleaf.LayoutDialect;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.thymeleaf.extras.conditionalcomments.dialect.ConditionalCommentsDialect;
import org.thymeleaf.extras.springsecurity5.dialect.SpringSecurityDialect;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;

import javax.servlet.Filter;

@Configuration
@EnableWebMvc
public class ThymeleafContextConfig implements  ApplicationContextAware {

    private ApplicationContext applicationContext;

    public void setApplicationContext(final ApplicationContext applicationContext)
            throws BeansException {
        this.applicationContext = applicationContext;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.addDialect(new LayoutDialect());
        templateEngine.addDialect(new DandelionDialect());
        templateEngine.addDialect(new ConditionalCommentsDialect());
        templateEngine.addDialect(new SpringSecurityDialect());

        // Enabling the SpringEL compiler with Spring 4.2.4 or newer can
        // speed up execution in most scenarios, but might be incompatible
        // with specific cases when expressions in one template are reused
        // across different data types, so this flag is "false" by default
        // for safer backwards compatibility.
        templateEngine.setEnableSpringELCompiler(false);
        return templateEngine;
    }

    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(this.applicationContext);
        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        // HTML is the default value, added here for the sake of clarity.
        templateResolver.setTemplateMode(TemplateMode.HTML);
        // Template cache is true by default. Set to false if you want
        // templates to be automatically updated when modified.
        templateResolver.setCacheable(true);
        return templateResolver;
    }


    @Bean
    public ThymeleafViewResolver viewResolver(){
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        // NOTE 'order' and 'viewNames' are optional
        viewResolver.setOrder(1);
    return viewResolver;
}


}

and :

   package com.srcsolutions.ecumcms.springJavaConfig;

import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;

import com.github.dandelion.core.web.DandelionFilter;
import com.github.dandelion.core.web.DandelionServlet;

public class ApplicationInitializer implements WebApplicationInitializer {

    private ApplicationContext applicationContext;

    public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }


    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {

        // Register the Web application context
        AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext();
        mvcContext.register(WebContextConfig.class);

        // Context loader listener
        servletContext.addListener(new ContextLoaderListener(mvcContext));

        // Register the Dandelion filter
        //FilterRegistration.Dynamic dandelionFilter = servletContext.addFilter("dandelionFilter", new DandelionFilter());
        //dandelionFilter.addMappingForUrlPatterns(null, false, "/*");


        // Register the Dandelion servlet
        ServletRegistration.Dynamic dandelionServlet = servletContext.addServlet("dandelionServlet", new DandelionServlet());
        dandelionServlet.setLoadOnStartup(2);
        dandelionServlet.addMapping("/dandelion-assets/*");
    }
}

`

Так что я все еще не уверен, совместима ли эта комбинация весны и одуванчика. Теперь, если я закомментирую templateEngine.addDialect (new DandelionDialect ()); ошибка исчезнет, ​​и я смогу получить базовый шаблон для рендеринга, но пакет из файлов ресурсов json одуванчика не обрабатывается.

...