【问题标题】:thymeleaf utext / th:utext is inserting a newline on its own, why? [duplicate]thymeleaf utext / th:utext 自己插入换行符,为什么? [复制]
【发布时间】:2020-12-25 11:16:18
【问题描述】:

th:utext 中使用简单的 html 标记似乎会导致呈现错误的换行符。为什么会这样,和/或我该如何预防?

我的标记如下所示:

<div class="row mb-1" th:utext="${item.snippet}"></div>

我的 Java 看起来像这样:

snippet = StringUtils.replaceIgnoreCase(snippet, 
searchText.trim(), 
"<strong>"+searchText.trim().toUpperCase()+"</strong>");

snippet 是“敏捷的棕狐跳过懒狗”时; searchText 被“跳跃”了;并且存在strong 标签; html 呈现如下:

The quick brown fox
<strong>JUMPED</strong>
over the lazy dogs

当我删除 strong 标签时,html 呈现如下:

The quick brown fox JUMPED over the lazy dogs

值得注意的是,我说的不仅仅是它在浏览器中的显示方式;源代码实际上在&lt;/strong&gt; 之后显示了一个换行符;当&lt;/strong&gt; 不存在时没有换行符。我已经确认它也没有被添加到 Java 层中。

【问题讨论】:

    标签: java html thymeleaf newline


    【解决方案1】:

    尝试使用“内联表达式:”

    <div class="row mb-1">[(${item.snippet})]</div>
    

    记录在here

    至于为什么,我有一个类似的模板,并注意到 Thymeleaf 3.0 发布后的行为变化。在描述内联表达式时,issue 将等效描述为:

    <div class="row mb-1"><th:block th:utext="${item.snippet}"/></div>
    

    该行为表明对部分或所有标签有额外的文本处理,&lt;th:block th:utext"..."/&gt; 必须隔离目标文本。

    【讨论】:

    • 我尝试了这两个示例,并且呈现了相同的错误换行符。很奇怪。
    • 我同意。顺便说一句,您在 Java 代码中调用了.toUpperCase(),但您的 HTML sn-ps 不显示大写——您知道那里发生了什么吗?
    • 似乎缺少一些相关的上下文。 “项目”只是一个 POJO 吗?
    • 以大写形式呈现;在清理 sn-p 以进行上传时,我错过了这一点。 item 是列表中的单个 pojo,使用 th:each 对其进行迭代。
    • 结果?这根本不是百里香叶问题。这是一个骗局:stackoverflow.com/questions/18419254/strong-tags-new-line
    猜你喜欢
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 2021-12-05
    相关资源
    最近更新 更多