В режиме, указанном в application.properties
#spring.thymeleaf.mode=HTML
Intellij Run Debug работает нормально, но выполнение jar из командной строки дает следующее, когда браузер пытается открыть страницу:
2018-12-24 12: 16: 13.957 ОШИБКА --- [0.1-8080-exec-1] org.thymeleaf.TemplateEngine: [THYMELEAF] [http-nio-12 7.0.0.1-8080-exec-1] Шаблон обработки исключения "result-sm": режим шаблона "HTML" не настроен 24 декабря 2018 г. 12:16:14 org.apache.catalina.core.StandardWrapperValve invoke СЕРЬЕЗНО: Servlet.service () для сервлета [dispatcherServlet] в контексте с путем [] выдал исключение [Запрос на обработку fa iled; вложенное исключение - org.thymeleaf.exceptions.TemplateInputException: режим шаблона "HTML" не настроен] с первопричиной org.thymeleaf.exceptions.TemplateInputException: режим шаблона "HTML" не настроен в org.thymeleaf.TemplateRepository.getTemplate (TemplateRepository.java:256) в org.thymeleaf.TemplateEngine.process (TemplateEngine.java:1104) в org.thymeleaf.TemplateEngine.process (TemplateEngine.java:1060) в org.thymeleaf.TemplateEngine.process (TemplateEngine.java:1011) в org.thymeleaf.spring4.view.ThymeleafView.renderFragment (ThymeleafView.java:335) в org.thymeleaf.spring4.view.ThymeleafView.render (ThymeleafView.java:190) в org.springframework.web.servlet.DispatcherServlet.render (DispatcherServlet.java:1286)
Если объявление режима удалено из application.properties, jar предполагает, что это режим LEGACYHTML5, и пытается выполнить синтаксический анализ nekoHTML, который вообще не является HTML5. Например, он говорит, что <linK> не имеет подходящего </link>.
Кажется, у этого должен быть простой обходной путь, но я не смог его найти.
Спасибо
Обновлено: добавлен код для распознавателя шаблонов. Я скопировал это скопировал этот код с другого сайта без особого понимания. Он был изменен, чтобы соответствовать реальной структуре проекта. Я запустил его с помощью отладчика, и он, похоже, не был вызван.
@Configuration
@EnableWebMvc
public class ThymeleafConfig extends WebMvcConfigurerAdapter {
@Bean
public ClassLoaderTemplateResolver templateResolver() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("templates/");
templateResolver.setCacheable(false);
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setCharacterEncoding("UTF-8");
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setCharacterEncoding("UTF-8");
return viewResolver;
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
}
Добавлен код преобразователя шаблонов.
Вы должны использовать статический TemplateMode.HTML вместо HTML при вызове templateResolver.setTemplateMode("HTML");. Затем закомментируйте spring.thymeleaf.mode=HTML и попробуйте. Я не знаю наверняка, решит ли это проблему. Если нет, можете ли вы также опубликовать свой шаблон result-sm?
Также обратите внимание, что вы фактически отключаете конфигурацию по умолчанию для Spring Boot, включая конфигурацию. Если вы хотите пойти по этому пути, вы, вероятно, также захотите аннотировать с помощью @EnableWebMvc. docs.spring.io/spring-boot/docs/current/reference/htmlsingle /…
Я внес предложенные изменения, но все еще получаю сообщение «HTML TemplateMode не настроен». Я установил точки останова в ThymeleafConfig выше, и ни одна из них не сработала, что наводит меня на мысль, что это не было вызвано. Он был размещен на том же уровне в дереве исходных текстов, что и основной файл приложения. Я не публиковал результаты-sm, потому что это 600 строк очень запутанного html и js и работает в Intellij. Я выложу его, если сочтете нужным.
Можете ли вы вместо этого попробовать перейти на самую простую страницу без закрывающего тега ссылки? Нравится <!DOCTYPE html><html><head><link rel = "stylesheet" type = "text/css" href = "some.css"></head><body>Russell</body></html>? Так вы сможете узнать, есть ли это в вашем HTML.
У вас не должно быть этой проблемы в новом проекте Spring Boot, так что что-то не так ...
Чтобы изолировать, вы также можете попробовать полностью удалить конфигурацию и строку spring.thymeleaf.mode=HTML и позволить Spring Boot управлять всем этим.
Я создал базовую страницу, как было предложено. Тот же набор проблем, работает на Intellij, а не как jar. Без настройки режима в application.properties по умолчанию используется HTML5. Intellij обнаруживает ошибку и меняет режим на HTML. Баночка пытается использовать режим HTML% и не работает по ссылке. Те же проблемы, если я удалю ThymeleafConfig.
Я установил точки останова в ThymeleafConfig, но ни одна из них не срабатывает. Это когда-нибудь выполняется? Я что-то еще упускаю. Это не свежий проект, но я впервые попытался создать банку.
По крайней мере, мы знаем, что это не HTML. В вашем pom.xml есть ли у вас spring-boot-maven-plugin? Необходимо создать исполняемую банку согласно документации. Вы можете увидеть, пропустили ли вы какие-либо шаги здесь: docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/html /…
Похоже, что бобы никогда не вызываются. Я изменил подписи bean-компонентов, чтобы они соответствовали подписям в руководстве по миграции Tymeleaf 3, но они все равно не вызывались.




У вас есть что-нибудь настроенное для вашего преобразователя шаблонов? Если да, опубликуйте код (он должен быть в классе с аннотацией
@Configuration).