我在数据库中存储了一个字符串。当我保存并检索字符串时,我得到的结果如下:
这是我的新对象
测试多条生产线
-- 测试 1
-- 测试 2
-- 测试 3
这就是我在调用保存和索引方法时从 println 命令中得到的。
但是当我在屏幕上显示它时。它显示为:
这是我的对象 测试多行 -- 测试 1 -- 测试 2 -- 测试 3
已经尝试像下面这样显示它:
${adviceInstance.advice?.encodeAsHTML()}
但还是一样。
我是否需要将 替换为
或类似的东西?有没有更简单的方法可以正确显示它?
常见问题有多种解决方案
1> 可能是你用 <br>
替换
因此,无论是在您的控制器/服务中,还是在您喜欢的 GSP 中:
${adviceInstance.advice?.replace('n','<br>')}
2>在只读文本区域中显示内容
<g:textArea name="something" readonly="true">
${adviceInstance.advice}
</g:textArea>
3> 使用<pre>
标签
<pre>
${adviceInstance.advice}
</pre>
4> 使用css空格 http://www.w3schools.com/cssref/pr_text_white-space.asp:
<div class="space">
</div>
//css code:
.space {
white-space:pre
}
如果您对这些字段的存储有严格的配置,还要注意,当您通过表单提交它时,还有其他元素我没有深入研究它实际上是什么,它实际上可能是返回的回车或\r,无论如何在下面的评论中解释。关于设置每次收到元素时修剪元素的设置器的良好规则。即:
Class Advice {
String advice
static constraints = {
advice(nullable:false, minSize:1, maxSize:255)
}
/*
* In this scenario with a a maxSize value, ensure you
* set your own setter to trim any hidden r
* that may be posted back as part of the form request
* by end user. Trust me I got to know the hard way.
*/
void setAdvice(String adv) {
advice=adv.trim()
}
}
${raw(adviceInstance.advice?.encodeAsHTML().replace("n", "<br>"))}
这就是我解决问题的方式。
首先,确保字符串包含 以表示换行符。例如:
String test = "This is first line. n This is second line";
然后在 gsp 页面使用中:
${raw(test?.replace("n", "<br>"))}
输出将如下所示:
This is first line.
This is second line.