弹簧靴和百里香叶

Posted

技术标签:

【中文标题】弹簧靴和百里香叶【英文标题】:spring boot & thymeleaf 【发布时间】:2018-02-01 06:40:47 【问题描述】:

我使用的是 spring boot 1.5.6 release,以及 thymeleaf 3.0.0.release,thymeleaf-layout-dialect 2.0.0。

我写了一个 html 文件,如下所示。

header_top 和 footer_bottom 是另外两个html文件,内容分别是:

我有一个控制器,很简单:

启动应用如下:

the applications.properties file cotains contents below: 
spring.thymeleaf.mode=HTML5
spring.thymeleaf.cache=false
spring.session.store-type=none

logging.level.root=INFO
logging.level.org.springframework.web=DEBUG
debug=true

当我运行应用程序时,我在 chrome 地址栏中输入了http://localhost:8080。我得到的是你好世界。所以我猜 spring boot & thymeleaf 模板解析器可以找到 index.html 文件。但是 header_top::catelogfooter_bottom::copy 根本没有被解析。我通过chrome dev工具检查了页面的源代码。 <div th:insert... 与模板文件中的一样。所以我猜th:* 根本没有被解析。我是弹簧靴和百里香的新手。我已经google了很长时间,但仍然找不到解决方案。

请任何人帮助我。

请求发生时,日志如下:

2017-08-25 10:56:35.023 DEBUG 34177 --- [nio-8080-exec-3] o.s.b.w.f.OrderedRequestContextFilter : Bound request context to thread: org.apache.catalina.connector.RequestFacade@6333b70f 2017-08-25 10:56:35.024 DEBUG 34177 --- [nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : DispatcherServlet with name 'dispatcherServlet' processing GET request for [/] 2017-08-25 10:56:35.024 DEBUG 34177 --- [nio-8080-exec-3] s.w.s.m.m.a.RequestMappingHandlerMapping : Looking up handler method for path / 2017-08-25 10:56:35.024 DEBUG 34177 --- [nio-8080-exec-3] s.w.s.m.m.a.RequestMappingHandlerMapping : Returning handler method [public java.lang.String com.easylife.haozu.controller.IndexController.index(org.springframework.ui.Model)] 2017-08-25 10:56:35.024 DEBUG 34177 --- [nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : Last-Modified value for [/] is: -1 2017-08-25 10:56:35.024 DEBUG 34177 --- [nio-8080-exec-3] o.s.w.s.v.ContentNegotiatingViewResolver : Requested media types are [text/html, application/xhtml+xml, image/webp, image/apng, application/xml;q=0.9, */*;q=0.8] based on Accept header types and producible media types [*/*]) 2017-08-25 10:56:35.024 DEBUG 34177 --- [nio-8080-exec-3] o.s.w.servlet.view.BeanNameViewResolver : No matching bean found for view name 'index' 2017-08-25 10:56:35.025 DEBUG 34177 --- [nio-8080-exec-3] o.s.w.s.v.ContentNegotiatingViewResolver : Returning [org.thymeleaf.spring4.view.ThymeleafView@64c00234] based on requested media type 'text/html' 2017-08-25 10:56:35.025 DEBUG 34177 --- [nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : Rendering view [org.thymeleaf.spring4.view.ThymeleafView@64c00234] in DispatcherServlet with name 'dispatcherServlet' 2017-08-25 10:56:35.028 DEBUG 34177 --- [nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : Successfully completed request 2017-08-25 10:56:35.028 DEBUG 34177 --- [nio-8080-exec-3] o.s.b.w.f.OrderedRequestContextFilter : Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@6333b70f

【问题讨论】:

这可能不是问题,但是,您是否可以在页眉和页脚文件中使用打开和关闭的 htmlbodyDoctype 标签,考虑到这一点您已经将它们放在主索引中了吗? @andre3wap 这不是问题,因为插入的一段代码只是 th:fragment 中的一段 【参考方案1】:

你能试试用这种方式插入吗?

<div th:insert="header_top :: catalog"></div>

<div th:insert="footer_bottom :: copy"></div>

另外,header_top.html 中的命名空间不正确,应该是:

xmlns:th="http://www.thymeleaf.org"

如果您删除未使用的 xmlns:layout 可能会很好,以防万一。

【讨论】:

w3c 命名空间由 intelij idear IDE(2017.2 终极版)推荐。在我发布这个问题之前我已经尝试过你所说的,仍然是问题。 您是否从 th:insert 中删除了 ~ 字符?您是否尝试删除这 3 个字符 ~?因此,您将拥有 而不是【参考方案2】:

尝试像这样插入你的片段:

 <div th:replace="components/header_top :: catalog"></div>
 <div th:replace="components/footer_bottom :: copy"></div>

components/header_topcomponents/footer_bottom 代表 HTML 片段文件的路径(例如,它应该放在 templates 文件夹中您的应用程序)

catalog:: 之后的 copy 是您的片段名称(应该与您的 th:fragment 名称相同)。

【讨论】:

还是问题:( 那么应用程序的日志说什么?

以上是关于弹簧靴和百里香叶的主要内容,如果未能解决你的问题,请参考以下文章

带有弹簧靴的百里香叶缓存

使用带有“if”条件的百里香叶的弹簧安全性

保存对象列表返回无法反序列化错误

带有百里香叶转义字符的内联javascript

点击链接不适用于百里香叶

遍历百里香叶中的数组