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>

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


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.


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".


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.