JSP: balise <c: out> de JSTL

110

En écrivant une page JSP, que fait-on exactement <c:out>? J'ai remarqué que ce qui suit a le même résultat:

<p>The person's name is <c:out value="${person.name}" /></p>
<p>The person's name is ${person.name}</p>
Steve Kuo
la source

Réponses:

153

c:out échappe les caractères HTML afin que vous puissiez éviter les scripts intersites.

si person.name = <script>alert("Yo")</script>

le script sera exécuté dans le second cas, mais pas lors de l'utilisation c:out

Krosenvold
la source
2
Seulement si 'escapeXML' est défini sur true (je ne sais pas si c'est par défaut)
Chris Serra
17
Je pense que c'est vrai par défaut.
Zack The Human
7
NB il échappe au XML et non au HTML. Une des subtilités les plus ennuyeuses de JSTL. Je finis toujours par écrire mon propre HTML escape EL fn.
Adam Gent
4
Le nom de l'attribut est sensible à la casse, donc c'est escapeXml = "true" et non escapeXML
Mark Chorley
2
Je n'ai aucune idée de ce que montre l'exemple de code de cette réponse - quelqu'un peut-il clarifier? Il mentionne un "second cas" mais je ne vois pas cela et je ne vois pas c: out utilisé dans le code.
IcedDante
126

Comme l'a dit Will Wagner, dans l'ancienne version de jsp, vous devriez toujours l'utiliser c:outpour afficher du texte dynamique.

De plus, en utilisant cette syntaxe:

<c:out value="${person.name}">No name</c:out>

vous pouvez afficher le texte "Aucun nom" lorsque le nom est nul.

alexmeia
la source
24
Cool! Je ne savais pas ça.
Adam Asham
D'accord, cool. Merci d'avoir enseigné et aidé. Je ne le savais pas non plus. À votre santé!
B-Money
20
ou <c: out value = "$ {person.name}" default = "No Name" />
gmustudent
2
JSR 52, version de maintenance 2, voir page 22 "avec un corps". Lien: download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
Barett
1
@Barett. Cool. Je me demande pourquoi cela ne fait jamais aucun des tutoriels ou des exemples. Une syntaxe plus pratique que l'attribut par défaut IMO.
Thilo
5

Vous pouvez explicitement activer l'échappement des entités Xml en utilisant une valeur d'attribut escapeXml égale à true. FYI, c'est par défaut "vrai".

Jeunot
la source
Un exemple de code aiderait vraiment à compléter cette réponse.
RachelD
4

Les anciennes versions de JSP ne prenaient pas en charge la seconde syntaxe.

Will Wagner
la source