3 Stimmen

Wie fügt man <br />-Tags in einen Java-String ein?

Ich versuche, Zeilenumbruch-Tags einzufügen
in einen Text zu verwandeln und ihn auf einer Webseite anzuzeigen. Die Zeichen < und > werden übersetzt in &lt; y &gt; und die Tags werden auf der Webseite als Text angezeigt.

Der Text sieht so aus, wenn ich ihn aus der Datenbank auswähle (ich habe ihn auf SYSOUT ausgegeben):

version 12.4
service timestamps debug datetime
service timestamps log datetime
service password-encryption

Dann lasse ich es durch diesen kleinen Filter laufen:

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;
}

Hier ist die Webseite (es handelt sich um eine Seam-Anwendung mit Facelets):

<rich:tab label="Config">
    hello<br />
    there<br />
    #{devConfig.config}
</rich:tab>

Und der Seitenquelltext sieht so aus:

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;

Wie Sie sehen können, werden meine Tags als HTML-Zeichen und nicht als Tags ausgegeben. Was muss ich tun, um Zeilenumbruch-Tags am Ende jeder Textzeile einzufügen?

TDR

7voto

BalusC Punkte 1034465

Sie müssen das (standardmäßige) HTML-Escaping von Text deaktivieren. Das können Sie mit h:outputText (oder ein RichFaces-Äquivalent dazu) mit der escape Attribut gesetzt auf false .

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

1voto

Aleja_Vigo Punkte 960

Wie schon gesagt, es geht um die Aussicht. Sie können nicht alles nur im Controller/Modell oder Java String tun. Kein magisches Escaping oder eine Kombination kann die <br> unversehrt zum generierten HTML gelangen. Sie müssen die erforderliche Attributänderung in Ihrer JSP finden.

In Struts ist die "Filter" ein, setzen Sie es auf false, um das Escaping Ihres HTML zu vermeiden:

Java

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

JSP

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

0voto

George Profenza Punkte 47681

Ich schreibe nicht so viel Java, vor allem nichts, was damit zu tun hat, aber ich frage mich, kann dies

<rich:tab label="Config">
    hello<br />
    there<br />
    #{devConfig.config}
</rich:tab>

nicht so geschrieben werden

<rich:tab label="Config">
    <![CDATA[
    hello<br />
    there<br />
    ]]>
    #{devConfig.config}
</rich:tab>

oder einfach:

<rich:tab label="Config">
    <![CDATA[
    hello
    there
    ]]>
    #{devConfig.config}
</rich:tab>

?

0voto

Martijn Courteaux Punkte 65602

Vielleicht habe ich Ihre Frage nicht ganz verstanden. Aber ist es nicht möglich, einfach die \n con <br /> ?

public DevConfigs getDevConfig() {

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

Ich habe Ihren Text in dieser Regex-Tester . Das funktioniert gut, aber wenn ich die Option Preg por Dialect ... Er wird ersetzt durch &lt;br /&gt; . Nur mit Javascript-Dialekt geht es richtig.
Vielleicht ist das also das gleiche Problem.

Oh. Wenn Sie die .$ für Ihre Regex, entfernen Sie das letzte Zeichen aus der Zeile (beim Ersetzen).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X