У меня есть проект 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 одуванчика не обрабатывается.