我必须在thymeleaf中显示下面的文本,但它无法显示,也不确定原因和解决方案。
下面是来自JSON格式的文本,我正在解析这个json对象,并将其设置在POJO Entities中,以便Thymeleaf渲染。
我期待下面的输出:
如果我使用<span th:text="${comment.commentText}"></span>
,电子邮件地址显示正常,但我失去了格式,这意味着无论换行符如何,所有内容都显示在一行中,但如果我使用<span th:utext="${comment.commentText}"></span>
,thymeleaf无法呈现(在我的commentsText中没有电子邮件地址字段,thymeleaf通过使用th:utext
来呈现文本)。
更新日期:
我尝试了andrewJames建议的解决方案,< and >用<
和>
替换它可以替换电子邮件的括号,但无法显示thymeleaf中的换行符。
Java代码:
commentData.setCommentText(comment.replaceAll("(\r\n|\r|\n|\n\r)", "<br>")
.replaceAll("\t", " ").replaceAll("<", "<").replaceAll(">", ">")
);
替换后,这是我的comment.getCommentText()
数据
Entered comments: <br><br>One <br>Two <br><br>My Email: <test@g.com>
百里香叶码
<span th:utext="${commentText}"></span>
输出为:
如果在字符串变量replaceAll("<", "<").replaceAll(">", ">")
的末尾添加额外的代码行,我不确定为什么<br>
标记不能呈现
感谢您的时间和任何投入将不胜感激。
1条答案
按热度按时间iklwldmw1#
如果电子邮件地址是硬编码的,为什么不用途:
这将生成文本
<test@g.com>
。(no需要使用Thymeleaf在所有)。
如果电子邮件地址需要由模型属性提供,请将其放在span中-类似于:
它使用
|...|
作为字符串连接器。您可以使用此
<span>
来获得所需的精确布局。参考:有关
<
等序列,请参见Which characters need to be escaped in HTML?只是补充一下:如果你不需要使用
th:utext
,那么你应该避免使用它。如果你用它来显示用户提供的数据(任何你不能完全控制显示值的数据),它会带来安全漏洞。更新
在本例中,您有一个完整的字符串。为了使用
<
和>
包围电子邮件地址,您需要做两件事:1.将这些 * 特定的 *
<
和>
字符替换为它们的HTML转义码,* 在字符串 * 中,然后将其传递给Thymeleaf。1.在Thymeleaf表达式中使用
th:utext
,以确保字符串中的 other HTML标记(如<br>
)被处理为HTML而不是文本。字符串变为:
Thymeleaf是这样的:
如何替换这两个特定的
<
和>
字符取决于您-有各种可能性。假设你(大概)需要解析JSON,然后才能通过Thymeleaf呈现它的内容,那么你就可以在那时进行替换。
Java正则表达式替换是一种方法:
然后,您可以定位字符串末尾的这两个捕获组(
(<)
和(>)
),并用它们的HTML转义序列替换它们。但问题中没有显示相关代码,因此这是推测。
如果解决方案不明显,我建议针对新的具体步骤提出一个新的、具体的、有重点的问题(我这样说是因为它显著改变了你最初在这里提出的问题,因此应该是一个新问题)。
也许这将为您指出一个可能的方向(我相信还有许多其他方法也可以工作):