2009-05-14 5 views
0

Ich habe Code, der etwas HTML generiert, aber wenn ich versuche, diesen Inhalt in einem JSP ausgeben alle '<' werden ersetzt durch '&lt;' und alle '>' mit '&gt;'. Hier ist das Stück, das das Ergebnis macht:Problem mit HTML-Ausgabe in JSP

<c:out value="${data}"/> 

Kann jemand bitte erklären, was den Charakter Ersatz verursacht, und wie kann es vermieden werden?

PS: Ich habe escapeXml = 'false' Eigenschaft von <c:out/> Tag versucht, nichts wird angezeigt.

Danke, Natasha

Antwort

1

Was tun Sie das erzeugte HTML tun wollen, tun Sie es Markup vom Browser verwendet werden, oder tun Sie es auf der letzten Seite angezeigt werden sollen, zum Beispiel als Beispielcode sichtbar für den Benutzer? Ohne escapeXml = 'false' wird es als HTML an den Browser ausgegeben und zusammen mit allen anderen Markups interpretiert. Mit escapeXml = 'true' wird es in ein markiertes Markup umgewandelt, das für den Endbenutzer sichtbar gemacht wird. Es hängt also alles davon ab, was Sie zu tun versuchen.

Wenn Sie < und> für den Endbenutzer sichtbare Zeichen haben möchten, müssen sie als & lt angezeigt werden; und & gt; im Markup.

Nick

+0

Ich brauche diesen Inhalt als HTML an den Browser ausgegeben werden. Ich hätte wahrscheinlich erwähnen sollen, dass ich das in einem jquery-Dialogfenster mache. Ich frage mich, ob das einen Unterschied macht. –

0

gibt es ein escapeXml Attribut auf dem c: out-Tag, die standardmäßig auf true gesetzt ist, es auf false gesetzt und kein Entkommen stattfinden, dh Ihre HTML wird ausgegeben, wie im Browser .

1

Das out-Tag verhält sich so, wie es sollte - wenn Sie den literalen Wert ausgeben möchten, können Sie die EL expressen $ {data} direkt in Ihren Text einfügen. Das heißt, anstelle von

Some content <c:out value="${data}"/> some more content 

Sie

Some content ${data} some more content 

in Ihrer JSP verwenden würde.

Bevor Sie sich über c: out ärgern, denken Sie bitte daran, dass die Ausgabe oft etwas ist, was ein Benutzer dort eingegeben hat - möglicherweise mit etwas unerwünschtem Code. Stellen Sie sich vor, Sie verwenden $ {data} auf StackOverflow anstelle der (C# -Version von) c: out:

0

<c:out value="${data}"/> entkommt HTML-Zeichen, während ${data} nicht. Werfen Sie einen Blick auf this related question.