在 Thymeleaf 中创建空数据属性

2023-12-24

我试图在 Thymeleaf 3.0.3 (Spring 4.3.7) 中使用自定义数据属性创建一个元素:

<input th:attr="data-customAttr=${item.getMyAttr()}" />

如果 item.getMyAttr() 的结果是“someVal”,则渲染的 HTML 为:

<input data-customAttr='someVal' />

但是,如果 item.getMyAttr() 的结果是空字符串,则 Thymeleaf 会完全丢弃自定义属性。呈现的 HTML 看起来像:

<input />

我需要知道自定义属性是否已定义且为空,或者是否缺失且未定义。根据这个讨论:空的 HTML5 数据属性是否有效? https://stackoverflow.com/questions/9729080/are-empty-html5-data-attributes-valid,空数据属性应该完全有效。

经过一番挖掘后,我遇到了以下测试用例,它似乎表明 Thymeleaf 无法渲染空数据属性,这就是它在渲染时间之前将它们丢弃的原因。下面的 Thymeleaf 片段渲染得很好:

<input th:attr="__${'data-customAttr=' + 'someVal'}__" />

虽然这两个都会抛出错误:

<!-- Throws: 'org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as assignation sequence' -->
<input th:attr="__${'data-customAttr=' + ''}__" />
<input th:attr="__${'data-customAttr'}__" />

这是 Thymeleaf 中的错误吗?任何帮助将不胜感激。我也很乐意提供任何其他相关信息。

编辑:这是我在相当大的应用程序中大量使用的功能。虽然我知道有几种解决方法,但它们都增加了我为了完成一项非常简单的任务而必须编写/维护的代码量。我希望有一个长期的解决方案,即使该解决方案是“这是一个错误,请报告它”。


The __语法没有什么特别的......它只是让它运行评估器两次。它不起作用的原因是因为在每种情况下,它都会解析为无效的 thymeleaf 表达式。

例如:

<input th:attr="__${'data-customAttr=' + ''}__" />
<!-- evaluates to -->
<input th:attr="data-customAttr=" />
<!-- which is an invalid expression -->

与相同

<input th:attr="__${'data-customAttr'}__" />
<!-- evaluates to -->
<input th:attr="data-customAttr" />
<!-- which is again, an invalid expression -->

看来 thymeleaf 确实不会添加空属性。所以我认为你要做的最好的事情是这样的:

<input th:attr="data-customAttr-exists=${item.getMyAttr() != null}, data-customAttr=${item.getMyAttr()}" />

您必须检查第一个属性以了解它是否存在,并检查第二个属性以了解该值。这应该可以让您了解所有情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Thymeleaf 中创建空数据属性 的相关文章

随机推荐

  • 在 Hbase shell 上运行多个查询,无需再次调用 hbase shell

    再次调用 shell 需要时间 我想通过调用 hbase shell 一次来执行多个命令 下面的代码仅运行单个查询 cmd echo put test row1 cf a value1 hbase shell 我想在单个 hbase she
  • 数组[1]会发生什么

    我有一大段代码 旨在获取一个数组并对其进行处理 在当前项目中只有一个元素 因此我没有将变量更改为 char 而是将其声明为 char 数组 1 这样 我不需要修改我的代码 也不需要冒添加任何错误的风险 并且如果需求增长 可以轻松地增加它 它
  • 在 C++11 之前,移动语义是如何解决的?

    我最近一直在阅读移动语义以及它是如何引入到 C 11 中的 主要要点是 通过 窃取 临时对象的指针来创建对象 程序可以变得更加高效 这比对临时对象进行深度复制来创建新对象要高效得多 在 C 11 及更高版本 中 这是通过使用右值引用来实现的
  • javascript从X,Y到X1,Y1的平滑动画

    我想慢慢地将图像 或元素 从其实际的 X Y 位置移动到 X1 Y1 当 的时候distanceX 和 X1 之间is equalY 和 Y1 之间的那个很容易 但是 如果 X 差异为 100 像素 Y 差异为 273 像素怎么办 作为 J
  • C++ 中“词法”一词意味着什么?

    我读到有词法常量 词法运算符 词法范围等 术语 词法 如何改变常量 例如字符串文字 任何运算符或某些标识符的范围的含义 词法 意味着它与源代码相关 例如 1是一个词汇常量 奥托 sizeof char 也是一个编译时整型常量表达式 但它不是
  • 在 PHP 中打印小于和大于符号

    我在尝试打印时遇到问题 lt gt 使用 PHP 编写 HTML 中的符号 我正在附加一个字符串
  • 如何向IDEA添加自定义构建脚本?

    有没有一种简单的方法来配置完全自定义的构建过程非Java项目在 IntelliJ IDEA 中 基本上 我只需要运行自定义 shell 命令 而不是任何更智能的构建过程 尝试将这些 shell 命令配置为自定义工具 文件 gt 设置 gt
  • DRF 序列化器字段已重命名为经过验证的数据中的源

    我有一个 drf 序列化器 其中有一个我想重命名的字段 class UserBulkUploadSerializer serializers Serializer is admin serializers BooleanField requ
  • 如何从 waldo::compare() 返回的对象中提取未完成的值?

    我正在尝试使用一个名为的新 R 包waldo https github com r lib waldo 也请参阅 tidyverse 博客 https www tidyverse org blog 2020 10 waldo 旨在比较数据对
  • 如何使用 jQuery 将子元素从一个父元素移动到另一个父元素[重复]

    这个问题在这里已经有答案了 我正在使用 jQuery数据表 http datatables net 插入 我想将搜索框 dataTables filter 和要显示下拉列表的记录数 dataTables length 从其父元素 dataT
  • oracle中如何使用级联

    create table loginDetails userId varchar 30 cellPhoneNo varchar 10 displayName varchar 20 password varchar 20 secretQues
  • Web 服务和用户的 Spring 安全性

    我们有一个 Web 应用程序 我们希望使用 Spring Security 以两种不同的方式保护它 1 使用登录表单进行身份验证并有权访问某些服务的用户 2 使用摘要身份验证保护的其他服务 用户 密码在请求的标头中传递 由其他 Web 应用
  • 如何停止活动的 AutoHotkey 脚本?

    昨天在调试 AutoHotkey 脚本时 我不小心触发了无限循环MouseMove and MouseClick事件 每隔 0 5 秒 我的鼠标就会点击屏幕的随机部分 在尝试使用任务管理器终止 AHK 失败后 我最终关闭了计算机以结束脚本
  • 创建可在任何其他计算机上运行的 jar 文件

    我必须创建一个 jar 文件 其中我需要在类路径 属性文件中添加外部 jar 文件 以便在任何其他计算机上运行它 您可以使用 manifest mf 定义外部类路径 也可以使用组成类路径并运行应用程序的脚本
  • C# 中 char* 转为字符串

    我正在从本机 DLL 调用一个函数 该函数返回一个char 指针 如何将返回的指针转换为字符串 我试过 char c function string s new string c 但它只是返回了一个奇怪的汉字 这不是正确的值c 也许本机 D
  • 尽管 cy.on('uncaught:exception') 但赛普拉斯未捕获断言错误

    关于以下错误 Uncaught Error Script error Cypress detected that an uncaught error was thrown from a cross origin script We cann
  • WIC 和 GDI+ 之间有什么关系?

    我对 Windows Imaging Component WIC 和 GDI 之间的关系很模糊 我过去做过一些工作 表明 WIC 可以生成视觉上优越的 GIF 编码 但令我惊讶的是 与 GDI 相比 我没有看到更多人使用它进行图像处理 我知
  • “IOError:获取中的大小不匹配!”通过 SFTP 检索文件时

    我有一个脚本 用于定期通过 SFTP 检索特定文件 有时 脚本会出错并显示以下输出 Traceback most recent call last File ETL py line 304 in
  • Android Studio 不会更新,说已经是最新版本

    当我尝试在 Android studio 中 检查更新 时 我收到以下消息 您已经安装了最新版本的 Android Studio 预览版 我使用的是 0 5 2 此处列出了最新版本http tools android com downloa
  • 在 Thymeleaf 中创建空数据属性

    我试图在 Thymeleaf 3 0 3 Spring 4 3 7 中使用自定义数据属性创建一个元素