thymeleaf 相关问题

Thymeleaf是一个XML / XHTML / HTML5模板引擎(可扩展到其他格式),可以在Web和非Web环境中工作。它更适合在Web应用程序的视图层提供XHTML / HTML5,它甚至可以在脱机环境中处理任何XML文件。它提供了一个可选模块,用于与Spring MVC集成,因此您可以在使用此技术的应用程序中将其用作JSP的完全替代,即使使用HTML5也是如此。

使用外部编辑器开发 Thymeleaf 模板

我正在开发一个 Spring Boot 项目,使用 Thymeleaf 作为模板引擎。我使用 Eclipse STS IDE,在其中运行项目。 如果我从 Eclipse STS 内部更改模板 (.html) 上的某些内容,我将...

回答 3 投票 0

Thymeleaf BindingResult 和 bean 名称的普通目标对象都不能用作请求属性

我是java和spring的新手,正在用thymeleaf练习mvc概念,我遇到了以下错误。 BindingResult 和 bean 名称“firstName”的普通目标对象均不能作为请求提供

回答 1 投票 0

Thymeleaf 递归片段在运行时失败,getProperty 的源为空

我想用 Thymeleaf 3.1.2 创建一个递归模板。 (完整代码如下)。 我有一个递归 Node 类: 公共静态类节点{ 公共字符串描述2; 公开名单 我想用 Thymeleaf 3.1.2 创建一个递归模板。 (完整代码如下)。 我有一个递归 Node 类: public static class Node { public String description2; public List<Node> children2; public List<Node> getChildren() { return children2; } public String getDescription() { return description2; } } 递归结构非常简单,没有子节点: Node root = new Node(); root.description2 = "The root"; root.children2 = List.of(); 模板: <div th:insert="~{this :: fragmentForNode(${root})}"></div> <div th:fragment="fragmentForNode(node)"> <span th:text="${node.description}"></span> <ul th:if="${!node.children.isEmpty()}"> <li th:each="child : ${node.children}"> <div th:insert="~{this :: fragmentForNode(${child})}"></div> </li> </ul> </div> 当我运行此测试时,我看到调用了 getDescription,然后调用 getChildren,然后调用 isEmpty。 然后我得到以下异常,我无法解释,因为有一个 if 条件应该停止回避。 org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating OGNL expression: "node.description" (template: " <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Help!</title> </head> <body> <div th:insert="~{this :: fragmentForNode(${root})}"></div> <div th:fragment="fragmentForNode(node)"> <span th:text="${node.description}"></span> <ul th:if="${!node.children.isEmpty()}"> <li th:each="child : ${node.children}"> <div th:insert="~{this :: fragmentForNode(${child})}"></div> </li> </ul> </div> </body> </html> " - line 10, col 11) at ... Caused by: ognl.OgnlException: source is null for getProperty(null, "description") 完整代码如下: import java.util.List; import org.thymeleaf.ITemplateEngine; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; import org.thymeleaf.templateresolver.StringTemplateResolver; public final class RecurseTest { private static final String HTML = """ <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Help!</title> </head> <body> <div th:insert="~{this :: fragmentForNode(${root})}"></div> <div th:fragment="fragmentForNode(node)"> <span th:text="${node.description}"></span> <ul th:if="${!node.children.isEmpty()}"> <li th:each="child : ${node.children}"> <div th:insert="~{this :: fragmentForNode(${child})}"></div> </li> </ul> </div> </body> </html> """; private static ITemplateEngine createTemplateEngine() { StringTemplateResolver templateResolver = new StringTemplateResolver(); TemplateEngine templateEngine = new TemplateEngine(); templateEngine.setTemplateResolver(templateResolver); return templateEngine; } public static class Node { public String description; public List<Node> children; public List<Node> getChildren() { System.err.println(description + ".getChildren"); return children; } public String getDescription() { System.err.println(description + ".getDescription"); return description; } } private static Node createHierarchy() { Node root = new Node(); root.description = "The root"; root.children = List.of(); return root; } public static void main(String[] args) { Context context = new Context(); context.setVariable("root", createHierarchy()); String html = createTemplateEngine().process(HTML, context); System.err.print(html); } } 您在 Thymeleaf 模板中遇到的问题源于您在模板中使用的属性名称与 Node 类中的实际字段名称不匹配。具体来说,在 Thymeleaf 模板中,您引用 ${node.description} 和 ${node.children},但在您的代码中,Node 类具有字段 description2 和 children2。 要解决此问题,您需要: 将 Node 类中的字段名称更改为 description 和 children,或者 更新 Thymeleaf 模板以引用 description2 和 children2 以匹配您的类字段。 我将引导您完成这两种方法: 1.修复 Node 类字段 更新您的 Node 类,使其字段名称与您在模板中使用的字段名称相匹配: public static class Node { public String description; // renamed to 'description' public List<Node> children; // renamed to 'children' public List<Node> getChildren() { return children; } public String getDescription() { return description; } } 通过执行此操作,您的 Thymeleaf 模板将正确映射到 description 类中的 children 和 Node 属性。 2.修复 Thymeleaf 模板 如果您不想更改类结构,可以更新 Thymeleaf 模板以使用正确的字段名称(description2 和 children2): <div th:insert="~{this :: fragmentForNode(${root})}"></div> <div th:fragment="fragmentForNode(node)"> <span th:text="${node.description2}"></span> <!-- Changed to description2 --> <ul th:if="${!node.children2.isEmpty()}"> <!-- Changed to children2 --> <li th:each="child : ${node.children2}"> <!-- Changed to children2 --> <div th:insert="~{this :: fragmentForNode(${child})}"></div> </li> </ul> </div> 为什么会发生这种情况? 出现错误source is null for getProperty(null, "description")是因为Thymeleaf试图访问description属性,但在Node对象中找不到它,从而导致null。由于 Thymeleaf 无法找到该属性,因此它会抛出此异常。发生这种情况是因为名称不匹配。 通过将类字段重命名为 description 和 children 或更新 Thymeleaf 模板以使用 description2 和 children2,错误将得到解决。 完成这些更改后,您的代码应该按预期工作,不会引发任何异常。

回答 1 投票 0

使用 thymleaf 格式化数字时发出

我在 Thymeleaf 中遇到数字格式问题。 我有一个 html 模板,它通过循环显示每个账单来显示账单数据。 大部分字段都是String类型,但是brokerageRate字段...

回答 2 投票 0

Spring Boot 2.4.2 和 Thymeleaf 3.0.12 - 访问静态方法

自从我切换到 Spring Boot 2.4.2 以来,我的 Thymeleaf 模板就被破坏了。当我想访问 Spring Controller 中的静态成员时,出现以下错误: 异常处理模板》

回答 3 投票 0

如何在 thymeleaf 中映射嵌套数组

这是我的代码: 我的课程: 公共课人员{ 列出学生; } 公开课学生{ 列出角色; } 在百里香叶中: 这是我的代码: 我的课程: public class Persons { List<Student> students; } public class Student { List<String> role; } 在百里香叶中: <select id="role" tabindex="16" class="form-select input-widget custom-size" th:field="*{students[0].role[0]}"> <option value="1">Mathematician</option> <option value="2">Economist</option> </select> 这意味着每个学生都可以扮演多种角色。问题是该程序仅迭代第一个数组(即 Students[1].role[0]、students[2].role[0]),而不迭代第二个数组。有没有办法控制哪个数组将被迭代?我希望在此选择标记中仅迭代第二个数组。 我尝试了上面的示例,但只迭代了第一个数组。 它应该看起来像这样: <th:block th:each="student, i: *{students}"> <th:block th:each="role, j: ${student.role}"> <select tabindex="16" class="form-select input-widget custom-size" th:field="*{students[__${i.index}__].role[__${j.index}__]}"> <option value="1">Mathematician</option> <option value="2">Economist</option> </select> </th:block> </th:block>

回答 0 投票 0

Spring thymeleaf 显示月份编号中的月份名称

我在 DTO 课程中有一个月份的整数。在 thymeleaf 模板上显示时,我只希望它是字符串中的月份名称,例如整数值 0 的“January”,依此类推。我检查了#dates 但c...

回答 1 投票 0

如何在文本中编写Thymeleaf代码?

我每个任务都有任务和评论。我使用手风琴来扩展评论部分,但问题是当我打开一个评论部分时会打开所有评论。 所以在 JAVA EE 中我这样解决了这个问题: 我有一个任务,每个任务都有评论。我使用手风琴来展开评论部分,但问题是当我打开一个评论部分时会打开所有评论。 所以在 JAVA EE 中我这样解决了这个问题: <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse<%task.getId>" data-bs-target="#collapse" aria-expanded="false" aria-controls="collapse<%task.getId>"> 您可以看到: <%task.getId> 文本内的代码可按其 id 单独打开每个任务评论。 但是如何在 Spring Boot Thymeleaf 中编写这个呢?我试过: <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse__${task.getId}__" data-bs-target="#collapse" aria-expanded="false" aria-controls="collapse__${task.getId}__"> 但 ${} 代码保持绿色。那么如何在文本中编写没有“th:??”的 Thymeleaf 代码呢? ? 我尝试了__${code}__,但不起作用。 使用 Kotlin(Spring Boot) Thymeleaf 仅处理以 th: 为前缀的属性。如果您没有 th:,则不会被处理。 (为什么要用Thymeleaf,而不是th:?) 您可以通过文字替换完成与您想要的类似的事情。 <button ... th:aria-controls="|collapse${task.getId}"|>

回答 1 投票 0

如何设置变量名的值?

我是 Thymeleaf 的新手,正在将我的网页从 JSP 转换为 Thymeleaf。我有一个这样的支柱标签: 该变量可以...

回答 3 投票 0

当值为null时使用Thymeleaf

我的数据库中有一些值,如果尚未输入,这些值可以为空。 但是当我在 html 中使用 Thymeleaf 时,它在解析 null 值时会出错。 有什么办法可以汉...

回答 11 投票 0

在 Spring Boot 应用程序中自动重新加载 Thymeleaf 模板

在我的 Spring Boot (2.4.2) 应用程序中,我在 src/main/resources/templates 目录中有一些 Thymeleaf 模板。我安装了 spring-boot-devtools,当代码

回答 2 投票 0

Spring Boot 2.4.2 ThymeLeaf 自动完成功能在 Eclipse 中不起作用

我想将 SpringBoot 与 Thymeleaf 一起使用。我创建了一个控制器,如下所示: 我有这样的控制器结构: @控制器 公共类AboutController { @RequestMapp...

回答 3 投票 0

Spring Boot 2.4.2 ThymeLeaf 自动完成功能在 Eclipse 中不起作用

我想将 SpringBoot 与 Thymeleaf 一起使用。我创建了一个控制器,如下所示: 我有这样的控制器结构: @控制器 公共类AboutController { @RequestMapp...

回答 3 投票 0

尽管包结构正确,但未检测到 Spring Boot 控制器

我遇到一个问题,我尝试将 WebController 与 Thymeleaf 模板连接,并在尝试访问页面 http://localhost:8080/home 时出现此错误: 圆形观景路径[ho...

回答 1 投票 0

向 Spring Boot 添加自定义 Thymeleaf 模板解析器

默认情况下,Spring Boot 应用程序在 classpath://templates 下搜索 thymeleaf 模板 我们如何添加一个解析器 例如,我们需要从本地目录中搜索模板,例如“c:\

回答 3 投票 0

如何使用 thymeleaf 在 html 中设置属性

我有一个 Spring 应用程序,它为我提供了一个具有模型属性的城市。在 html 代码中,我有一个带有很多 .所以,我想知道如果选项值相等,如何设置要选择的选项...

回答 1 投票 0

Spring boot thymeleaf 映射对我不起作用

我知道 StackOverflow 上也有像我一样的类似问题。我已经尝试了从这个问题中可以找到的所有答案,但这些都不起作用: Thymeleaf using path variables to th:href 你可以吗...

回答 1 投票 0

Thymeleaf 不能在同一标签中使用 th:each 和 th:replace

我需要执行以下操作 我需要执行以下操作 <tr th:fragment="rowFragment(rowObject)"> <td th:each="cellObject : ${rowObject.getCellObjects()}" th:replace="~{::cellFragment(${cellObject})}"></td> </tr> 用莱曼的术语来说,为列表中的每个对象构造一个新的单元。每个细胞本身都是通过百里香叶片段形成的,因此 th: 替换为 th:each。 我注意到这段代码在技术上确实与 th:each 和 th:insert 一起“工作”,但是这两个结合在一起会导致 Thymeleaf 渲染片段旁边定义的第一个元素(当只需要一个元素时,本质上会产生两个元素)因此我希望使用 th:replace。 但是 th:replace 沿着 th:each 会导致奇怪的空指针异常,我无法查明。我最好的猜测是 th:replace 从元素(以及 rowObject 变量)中删除 th:each ,然后尝试将此类 void/null rowObject 传递到片段中,从而导致空指针错误。 有什么建议吗? 根据 Thymeleaf 属性优先级 insert 和 replace 将在 each 运算符之前工作。这就是为什么在处理 cellObject 时尚未定义 replace。要更改处理顺序,您需要分离属性并在 each 之前处理 replace。为此,您可能需要使用 th:block 合成标签,您的代码可能看起来像... <tr th:fragment="rowFragment(rowObject)"> <th:block th:each="cellObject : ${rowObject.getCellObjects()}"> <td th:replace="~{::cellFragment(${cellObject})}"></td> </th:block> </tr> 请注意,我没有运行此代码,它仅用于演示该想法。

回答 1 投票 0

如何在thymeleaf中设置全局变量?

我在前端使用百里香,我知道百里香中的变量概念 如果我使用 th:text 变量中的值将是

回答 4 投票 0

HTMX 将参数传递给 hx-put (或 hx-get) 以搜索一项并填写编辑表单

如何使用 hx-put='http://localhost:0001/site/3' 传递搜索数据的 id,其中 3 是动态值(它是网格中的一行)。我在后端将它与 JavaSprngBoot 一起使用。 <...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.