如何将<br/>标签插入java String

时间:2010-01-05 18:39:06

标签: java regex xhtml jsf facelets

我正在尝试将换行标记插入某些文本并在网页上显示。 &lt;和&gt;标记正在翻译为&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 />
&lt;br /&gt;
&lt;br /&gt;

version 12.&lt;br /&gt;
service timestamps debug datetim&lt;br /&gt;
service timestamps log datetim&lt;br /&gt;
service password-encryptio&lt;br /&gt;
&lt;br /&gt;

正如您所看到的,我的标签是HTML字符,而不是标签。我需要做什么才能在每行文本末尾插入换行符?

TDR

4 个答案:

答案 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 ...他会替换为&lt;br /&gt;。只有使用Javascript方言它才是正确的。
所以也许这就是同样的问题。

喔。当您使用.$作为正则表达式时,可以从行中删除最后一个字符(替换时)。