我正在尝试将换行标记插入某些文本并在网页上显示。 &lt;和&gt;标记正在翻译为<
和>
,标记在网页上显示为文字。
当我从数据库中选择它时,文本看起来像这样(我将它输出到SYSOUT):
version 12.4
service timestamps debug datetime
service timestamps log datetime
service password-encryption
然后我通过这个小过滤器运行它:
public DevConfigs getDevConfig() {
String config = devConfig.getConfig();
Pattern pattern = Pattern.compile(".$", Pattern.MULTILINE | Pattern.DOTALL);
Matcher matcher = pattern.matcher(config);
String newConfig = matcher.replaceAll("<br />");
devConfig.setConfig(newConfig);
return this.devConfig;
}
这是网页(它是使用facelets的Seam应用程序):
<rich:tab label="Config">
hello<br />
there<br />
#{devConfig.config}
</rich:tab>
页面源代码如下:
hello<br />
there<br />
<br />
<br />
version 12.<br />
service timestamps debug datetim<br />
service timestamps log datetim<br />
service password-encryptio<br />
<br />
正如您所看到的,我的标签是HTML字符,而不是标签。我需要做什么才能在每行文本末尾插入换行符?
TDR
答案 0 :(得分:7)
您需要禁用(默认)HTML转义文本。您可以使用h:outputText
(或相同的任何RichFaces)将escape
属性设置为false
来完成此操作。
<h:outputText value="#{bean.property}" escape="false" />
答案 1 :(得分:1)
如前所述,一切都是关于观点的。你不能只在控制器/模型或java String中做任何事情。没有魔法转义或组合可以使<br>
无损地生成HTML。您必须在JSP中找到所需的属性更改。
在Struts中是“过滤器”一个,将其设为false以避免HTML的转义:
爪哇
String text = "This line will <br> break";
JSP
<bean:write name="object" property="attribute" filter="false"/>
答案 2 :(得分:0)
我没有写那么多Java,特别是与此无关,但我想知道, 可以吗
<rich:tab label="Config">
hello<br />
there<br />
#{devConfig.config}
</rich:tab>
不能写成这个
<rich:tab label="Config">
<![CDATA[
hello<br />
there<br />
]]>
#{devConfig.config}
</rich:tab>
或简单地说:
<rich:tab label="Config">
<![CDATA[
hello
there
]]>
#{devConfig.config}
</rich:tab>
答案 3 :(得分:0)
也许我完全不明白你的问题。但是,是否有可能只用\n
替换<br />
?
public DevConfigs getDevConfig() {
String config = devConfig.getConfig();
String newConfig = config.replace("\n", "<br />");
devConfig.setConfig(newConfig);
return this.devConfig;
}
我在this regex tester输入了您的文字。这样可以正常使用,但如果我按Preg
选择Dialect
...他会替换为<br />
。只有使用Javascript方言它才是正确的。
所以也许这就是同样的问题。
喔。当您使用.$
作为正则表达式时,可以从行中删除最后一个字符(替换时)。