【问题标题】:Thymeleaf ignores "\n" in String returned from methodThymeleaf 忽略从方法返回的字符串中的“\n”
【发布时间】:2022-02-15 20:32:55
【问题描述】:

在我的 HTML 中,我使用的是通过 thymeleaf 调用方法来获取内容的段落:

<p data-th-text="${fund.formatDescription()}"></p>

方法:

private String description;

public String formatDescription() {  
    return description.replace(";", " \n ");
}

我希望我的描述在每个分号后都有结束行。所以这就是我添加\n 的原因。但是 thymeleaf 会引入新行并返回连续文本。我尝试添加&lt;br/&gt;,但它最终没有被解释为html。我应该在说明中添加什么来代替分号来强制换行?

【问题讨论】:

  • &lt;/br&gt; 无效。正确的语法是 &lt;br/&gt; 自闭标签的 / 总是在末尾。
  • @litelite 你是对的,但在我的代码中 &lt;br/&gt; 这只是问题中的一个错字。

标签: java html thymeleaf


【解决方案1】:

Html 忽略换行符(这不是 thymeleaf 的错)。您可以:

  • 将描述放入&lt;pre&gt;&lt;/pre&gt;标签中(或使用&lt;p&gt;元素上的css white-space属性)。
  • 不要将; 替换为\n,而是将其替换为&lt;br /&gt; 并使用th:utext 而不是data-th-text。 (这意味着 html 将不会被转义,因此您最好确保用户不能将其他 html 放入描述字段,否则您会面临 html 攻击)。

【讨论】:

  • 仍然是相同的结果,我可以在网站&lt;br/&gt; 上看到普通文本。我试过data-th-utext,但标签仍然没有被解释为 HTML。
  • @MichaelDz -- 我在发布我的答案之前验证了它的工作原理,您可以查看 utext here 的文档...您可以验证您的替换吗?查看源代码时的 html 是什么样的?
  • 在我的段落中,HTML 源代码看起来像 &lt;p&gt;text &lt;br/&gt; text &lt;br/&gt; text&lt;/p&gt;, I've used data-th-utext`,&lt;pre&gt; 标记也无济于事。
  • @MichaelDz -- 认为你还有其他事情要做。如果 utext 不起作用,它看起来像 &lt;p&gt;test &amp;lt;br /&amp;gt; test &amp;lt;br /&amp;gt; final&lt;/p&gt;
  • 由于某种原因,data-th-utext 无法使用 HTML 标记。但相反,我用th:utext 替换了它,现在它工作正常!感谢您的帮助,将此添加到您的答案中,以便我将其标记为已接受。
【解决方案2】:

如果 css white-space 属性不是一个选项,我制作了一个 Thymeleaf 方言,可以很容易地保持换行符。 如果需要,它还可以支持 BBCode。 您可以将其作为依赖项导入(它非常轻量级),也可以将其用作制作自己的灵感。 在这里查看: https://github.com/oxayotl/meikik-project

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多