如何在Java字符串中插入<br/>标签

3

我正在尝试在一些文本中插入换行标签
并在网页上显示它。但是,< 和 > 符号被翻译成了&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


你没有展示给我们最关键的代码——将字符串输出到网页的代码。从你提供的内容来看,该字符串肯定包含“<”和“>”字符,而不是它们的HTML编码替代物,因此我们现在需要看到获取devConfig对象中字符串并输出的代码。 - delfuego
4个回答

7

您需要禁用文本的(默认)HTML转义。您可以使用h:outputText(或任何其它RichFaces等效项)并将escape属性设置为false来实现此目的。

<h:outputText value="#{bean.property}" escape="false" />

这段代码最初是在h:outputText标签内部的,但我不知道有escape属性。我要测试一下这个。最终我把输出文本放在了<pre>标签中。虽然不是很“高科技”,但最终它确实起作用了。 - april26
我忘了说我已经删除了所有的正则表达式匹配和替换,并且只是在<pre>标签中显示来自数据库的代码。 - april26

1
正如之前所说,一切都关乎视图。仅凭控制器/模型或Java字符串是无法做任何事情的。没有魔法转义或组合可以使<br>顺利传递到生成的HTML中。你必须在JSP中找到所需的属性更改。
在Struts中,使用"filter",将其设置为false以避免HTML的转义:

Java

String text = "This line will <br> break";

JSP

<bean:write name="object" property="attribute" filter="false"/>

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>

?


0
也许我没有完全理解你的问题。但是难道不可以简单地用<br />替换\n吗?
public DevConfigs getDevConfig() {

    String config = devConfig.getConfig();
    String newConfig = config.replace("\n", "<br />");
    devConfig.setConfig(newConfig);
    return this.devConfig;
}

我在这个正则表达式测试器中输入了您的文本。 这很好用,但是如果我选择Preg by Dialect...他会替换为&lt;br /&gt;。 只有使用Javascript语言环境时才能正确运行。
所以也许这是同样的问题。

哦,当您在正则表达式中使用.$时,您会删除该行的最后一个字符(在替换时)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接