当前位置: 首页 > 知识库问答 >
问题:

Spring引导thymeleaf不工作与LiteDeviceEnveratingViewResolver

岳昊空
2023-03-14

我正在使用Spring引导2.0.1。释放,使用Spring引导启动器胸腺。我有两个版本的个人电脑和手机页面。

下面是我的项目结构的一个简单版本

我想让该网站自动检测PC浏览器和手机浏览器,这样它就可以根据浏览器的类型将相同的请求URL映射到不同的页面

html文件非常简单,如下所示。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>This is from PC web browser</p>
</body>
</html>

这是我的控制器的代码。

@Controller
public class MyController {

    @RequestMapping("/")
    public String mainDefault(){
        return "home";
    }

    @RequestMapping("/home")
    public String main(){
        return "home";
    }
}

为了检测设备,我编写了以下配置类

@Configuration
public class Config implements WebMvcConfigurer {

    @Autowired
    private ApplicationContext applicationContext;

    @Bean
    public LiteDeviceDelegatingViewResolver liteDeviceDelegatingViewResolver() {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        viewResolver.setCharacterEncoding("UTF-8");
        LiteDeviceDelegatingViewResolver resolver = new LiteDeviceDelegatingViewResolver(viewResolver);
        resolver.setNormalPrefix("web/");
        resolver.setMobilePrefix("mobile/");
        resolver.setTabletPrefix("web/");
        resolver.setOrder(1);
        resolver.setEnableFallback(true);
        return resolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.addDialect(new LayoutDialect());
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }

    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(this.applicationContext);
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setPrefix("/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(".HTML5");
        templateResolver.setCacheable(false);
        return templateResolver;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        DeviceResolverHandlerInterceptor deviceResolverHandlerInterceptor = new DeviceResolverHandlerInterceptor();
        SitePreferenceHandlerInterceptor sitePreferenceHandlerInterceptor = new SitePreferenceHandlerInterceptor();
        LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
        localeChangeInterceptor.setParamName("lang");
        registry.addInterceptor(localeChangeInterceptor);
        registry.addInterceptor(deviceResolverHandlerInterceptor);
        registry.addInterceptor(sitePreferenceHandlerInterceptor);
        WebMvcConfigurer.super.addInterceptors(registry);
    }
}

然后当我试图运行应用程序时。我总是得到下面的错误。它似乎可以映射到正确的资源,即[/模板/网络/home.html]。但是它总是说无法打开ServletContext资源[/模板/网络/home.html]

如果我从移动浏览器访问,它映射到[/模板/移动/home.html]这也是正确的。

有人能帮我吗?提前谢谢你。

2018-04-19 17:18:57.040 ERROR 17732 --- [nio-9020-exec-9] org.thymeleaf.TemplateEngine             : [THYMELEAF][http-nio-9020-exec-9] Exception processing template "web/home": An error happened during template parsing (template: "ServletContext resource [/templates/web/home.html]")

org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "ServletContext resource [/templates/web/home.html]")
    at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:235) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]

............

Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/templates/web/home.html]
    at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:159) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.thymeleaf.spring5.templateresource.SpringResourceTemplateResource.reader(SpringResourceTemplateResource.java:103) ~[thymeleaf-spring5-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:223) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
    ... 52 common frames omitted

2018-04-19 17:18:57.047 DEBUG 17732 --- [nio-9020-exec-9] o.s.web.servlet.DispatcherServlet        : Error rendering view [org.thymeleaf.spring5.view.ThymeleafView@139a953a] in DispatcherServlet with name 'dispatcherServlet'

org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "ServletContext resource [/templates/web/home.html]")

共有1个答案

司徒经纶
2023-03-14

您正在尝试配置已经为您配置的内容。

  1. 确保您的依赖项列表中包含了sping-boot-starter-thymeleaf,并且包含了spage-mobile-autocongity。

注意:我假设您使用的是快照版本,以便与Spring和Spring Boot版本兼容。

将以下内容添加到您的application.properties

spring.mobile.devicedelegatingviewresolver.normalPrefix=web/
spring.mobile.devicedelegatingviewresolver.tabletPrefix=web/
spring.thymeleaf
 类似资料:
  • 我遵循这里描述的方法:https://github.com/jeroenbellen/blog-manage-and-reload-spring-properties,唯一的区别是,在我的例子中,属性在多个类中使用,所以我将它们放在一个实用工具类中,并使用getter引用它的变量。这就是类的样子: 我在其他类中使用变量,比如。我能够加载的属性启动只是很好,但我不能动态更新他们在飞行。有人能说出我做

  • 我在我写的index.xhtml页面中使用了Spring4和Thymeleaf: 我的build.gradle(一些依赖项)是: 我的spring-security.xml是: 以前,我使用Apache瓷砖,因为它都工作得很好。我不明白为什么Spring Secury不能和Thymeleaf一起工作。求求你,救命!

  • 在freemarker上多次尝试工作后,我切换到thymeleaf,也面临同样的问题。当返回html文件时,它只是一个字符串值,而不是模板文件夹中的html文件。 当我在他们的控制台上观看youtube thymeleaf视频时,我不知道为什么它甚至不能在控制台中启动。 这是main/resources/templates中的html文件 POM. xml

  • 这是我的安全配置代码: 但在编译spring时,仍在为我生成密码。 我通过print语句检查了配置是否正在加载,发现安全配置正在加载。我是否应该对给定的用户ID和密码进行任何更改。 提前感谢。

  • 我正在使用Thymeleaf制作一个Spring Boot web应用程序。我一直在试验WebJAR,在我的网页上使用JQuery和Bootstrap之类的东西。使用Spring靴,并尝试使用Bootstrap Webjar版本。 我的pom中有几个不同的Webjar,但我意识到没有加载css文件。webjar中的Javascript文件加载良好,但没有应用任何css。当查看WebDevelope

  • 大家好,我已经为我的应用程序安装了引导程序,它并不工作。这是我的application.scss档案 这是我的申请表。rb文件: application.js文件: 最后是我的Gem文件: 以下是我在尝试向网页添加导航栏时得到的信息: