【问题标题】:thymeleaf text mode string how to keep indent for each linethymeleaf 文本模式字符串如何保持每行的缩进
【发布时间】:2020-08-05 04:22:11
【问题描述】:

我在数据库中存储了一个包含换行符的字符串,在页面上显示时应该如下所示:

abc
def
hkg

现在我需要将此字符串作为电子邮件内容添加到电子邮件对话框,其格式应为:

我用于生成电子邮件内容的 thymeleaf 文本模板如下所示:

Test: [# th:each="g : ${gList}"]    
    Description:
        [(${g.descr})]

但是,在我将模板内容添加到textarea 之后,它是:

第 2 行没有缩进,这不是我想要的。

对于一个包含多行的字符串,我怎样才能得到如下格式?

Test:
    Description:
        abc
        def
        hkg

在对话框中显示电子邮件内容的 html 代码是:

<div class="row">                       
    <label class="col-2 text-right">Content:</label>
    <textarea id="emailContent" class="col-9" v-model="email.content" >
    </textarea>
</div>

另一个问题是:如果这个字符串很长但没有换行符,它只有单词之间的空格怎么办。在这种情况下,它仍然会从第 2 行开始显示该字符串的其余部分,而无需缩进。

【问题讨论】:

  • 假设您的电子邮件的内容类型是“text/html”(即不是纯文本),请尝试将 CSS 样式 white-space: pre; 添加到封闭标记中。见here
  • @andrewjames 你的意思是&lt;textarea style="white-space:pre",我试过但没用。
  • 是的——这就是我的意思(对我有用)。一定是其他区别。

标签: html thymeleaf


【解决方案1】:

存储在数据库中的字符串是abc\ndef\nhkg,因此当您打印出来时,您会得到:

Test:\n
....Description:\n
........abc\n
def\n
hkg

由于这是纯文本并且您没有任何 html 的格式化功能,您将不得不修改字符串本身。基本上,您需要用 8 个空格和一个新行替换您的换行符 \n。您希望字符串看起来像:

abc\n........def\n........hkg

至于在 Thymeleaf 中的样子。有点丑,但我认为这对你有用:

Test: [# th:each="g : ${gList}" th:with="newline=${T(System).getProperty('line.separator')}"]    
    Description:
        [(${#strings.replace(g.descr, newline, newline + '        ')})]

【讨论】:

  • 这是一个选项,如果这个字符串很长并且没有换行符,只有空格怎么办?当其中一些需要在第 2 行显示时,它仍然在第 2 行显示而没有缩进。
猜你喜欢
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 2022-06-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
相关资源
最近更新 更多