【发布时间】:2022-01-02 20:32:48
【问题描述】:
我无法理解 Thymeleaf 的 Textual template modes 功能的语法。我试图访问bean(工作正常)并调用getter,从那里我得到另一个对象。这个对象可以是空的,我需要在访问我需要的字符串之前检查它。
如何使用 Thymeleaf 中的 [# th:if 表达式在一行中做到这一点?
<script th:inline="javascript">
//This does not work (i have tried multiple things)
var string = /*[# th:if="${@bean.getObject()}"][[${@bean.getObject().getString()}]][/]*/ null;
</script>
【问题讨论】:
-
快速测试(与您的示例不完全相同)表明我无法将文本模板语法与 JavaScript natural templating 功能结合起来,您将表达式包含在注释
var myString = /* ... */ null;中。如果我删除自然模板块,我的表达式会按预期工作:var myString = [# th:if="${foo} == 'bar'"][[${foo}]][/];。否则,它被解释为注释。以防万一。 -
也许我误解了这个问题 - 我以为您明确想要使用 textual syntax 方法,而不是更典型的 JavaScript inlining 方法。否则,我认为@metroids 的答案是正确的方法。
-
我在没有
/* ... */的情况下测试了我的逻辑并且它有效。所以你是对的。但是,如果我删除了这些评论表达式,IntelliJ 会抱怨,并且在浏览器中独立打开 .html 文件时不会呈现它。而且我不明白为什么在这种情况下我必须删除它们.. -
"为什么我必须删除它们" - 您正在组合两种不兼容的语法。使用 cmets 的 JavaScript 内联意味着 Thymeleaf 期望在
[[和]]中找到标准的${...}表达式语法 - 而您尝试使用文本[#...][/]语法。您可以在我早期的 cmets 核心 Thymeleaf 的链接中找到教程和示例。对于 Spring,您可以在此处找到 SpEL 文档:Spring Expression Language (SpEL)。 SpEL 是您可以找到“安全导航”运算符的地方。 -
阅读此功能版本,它应该可以像我尝试的那样工作:github.com/thymeleaf/thymeleaf/issues/395 如果您向下滚动到“将 cmets 应用于任何元素”,他们会在 JAVASCRIPT 中解释输出表达式和 cmets 的组合.所以我仍然很困惑为什么它对我不起作用。
标签: javascript spring spring-boot thymeleaf