thymeleaf动态引用片段

╰+哭是因爲堅強的太久メ 2023-06-23 13:14 57阅读 0赞

众所周知,thymeleaf里,可以用include、insert、replace引入其他片段。而引入片段的时候,需要指明这个片段的地址。通常,我们会在开发的时候,就指明这个地址。但是,能不能在运行的时候,动态地改变这个地址呢?

具体来说,能不能将这个地址通过参数传进来,然后再include/insert/replace它?

西蒙说,可以的。

有代码有真相:

在这里插入图片描述
以下是一个块集合文件share.html,里面有这么个块list_form(tableId,searchKit)。其中searchKit是一个片段地址。整个块其实是一个搜索框,里面有一个默认放置的名称文本框,和一个搜索按钮。但是,一般情况下,这远远还不够。我们还需要按照实际情况加入各种过滤条件。这些过滤条件放在别的片段里,然后将片段地址传到这里来。
在这里插入图片描述

块集合文件share.html:

  1. <!--/* form */-->
  2. <block th:fragment="list_form(tableId,searchKit)">
  3. <form class="layui-form">
  4. <blockquote class="layui-elem-quote quoteBox">
  5. <form class="layui-form">
  6. <div class="layui-form-item">
  7. <!--/* 这里有一个条件判断,当searchKit不为空才引入searchKit指向的片段 */-->
  8. <block th:if="${searchKit != null}" >
  9. <block th:include="@{${searchKit}}" />
  10. </block>
  11. <div class="layui-inline">
  12. <label class="layui-form-label">名称</label>
  13. <div class="layui-input-inline">
  14. <input type="text" class="layui-input searchVal" placeholder="请输入搜索的内容" />
  15. </div>
  16. <a class="layui-btn search_btn" data-type="reload">搜索</a>
  17. </div>
  18. </div>
  19. </form>
  20. </blockquote>
  21. <table th:id="${tableId}" class="layui-hide" lay-filter="table_filter"></table>
  22. </form>
  23. </block>

片段一,search.html:

  1. <div class="layui-inline">
  2. <label class="layui-form-label">工程状态</label>
  3. <div class="layui-input-inline">
  4. <select name="state">
  5. <option value="">请选择</option>
  6. <option value="">建设中</option>
  7. <option value="">部分完工,资金收回</option>
  8. <option value="">已完工,申请验收</option>
  9. <option value="">已验收</option>
  10. </select>
  11. </div>
  12. </div>

集成所在页面index.html

  1. <!DOCTYPE html>
  2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title th:text="'修复项目 - ' + ${title}"></title>
  6. </head>
  7. <body>
  8. <!--/* 列表页主体 */-->
  9. <th:block th:include="shares/share::list_form(tableId='table1',searchKit='/project/frags/search')" />
  10. </body>
  11. </html>

这三者的关系:
index.html 调用了 share.html里的块list_form,然后list_form又插入了个性化搜索片段search.html。search.html的地址,是在index.html里通过参数传递给list_form的。

在这里插入图片描述


2020.1.15
其实以上做法是有问题的。在本机运行,没有问题;当部署到tomcat的时候,系统却不支持这种做法。原因不是无法识别参数,就算直接将路径写在include里,都不行。看上去,是tomcat不支持在引用一个片段的同时,它又去引用别的路径下的片段?

  1. <!--/* 这里有一个条件判断,当searchKit不为空才引入searchKit指向的片段 */-->
  2. <block th:if="${searchKit != null}" >
  3. <block th:include="@{${searchKit}}" />
  4. </block>

但是!我目前已知道真正官方的方法,可以解决动态引用问题,请看:

thymeleaf中片段(fragment)使用调用页内容

发表评论

表情:
评论列表 (有 0 条评论,57人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Thymeleaf抽取公共页面片段

    抽取页面 项目中,一般把所有的公共页面片段都抽取出来 放在一个独立的页面中 其他,所有的页面根据需要进行引用 参考文档 ![这里写图片描述][70] t