JSP: tag <c: out> di JSTL


110

Scrivendo una pagina JSP, cosa fa esattamente <c:out>? Ho notato che i seguenti risultati hanno entrambi lo stesso risultato:

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

Risposte:


153

c:out esegue l'escape dei caratteri HTML in modo da evitare lo scripting tra siti.

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

lo script verrà eseguito nel secondo caso, ma non durante l'utilizzo c:out


2
Solo se 'escapeXML' è impostato su true (non sono sicuro se sia predefinito)
Chris Serra

17
Credo che sia vero per impostazione predefinita.
Zack The Human

7
NB sfugge a XML e non HTML. Una delle sottigliezze più fastidiose di JSTL. Finisco sempre per scrivere il mio HTML escape EL fn.
Adam Gent

4
Il nome dell'attributo distingue tra maiuscole e minuscole, quindi è escapeXml = "true" non escapeXML
Mark Chorley

2
Non ho idea di cosa mostri l'esempio di codice di questa risposta, qualcuno può chiarire? Menziona un "secondo caso" ma non lo vedo e non vedo che c: out sia usato nel codice.
IcedDante

126

Come ha detto Will Wagner, nella vecchia versione di jsp dovresti sempre usare c:outper produrre testo dinamico.

Inoltre, utilizzando questa sintassi:

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

è possibile visualizzare il testo "Nessun nome" quando il nome è nullo.


24
Freddo! Non lo sapevo.
Adam Asham,

D'accordo, cool. Grazie per l'insegnamento e l'aiuto. Non lo sapevo nemmeno io. Saluti!
B-Money

20
oppure <c: out value = "$ {person.name}" default = "No Name" />
gmustudent

2
JSR 52, versione di manutenzione 2, vedere pagina 22 "con un corpo". Link: download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
Barett

1
@Barett. Freddo. Mi chiedo perché questo non fa mai nessuno dei tutorial o degli esempi. Una sintassi più conveniente rispetto all'attributo predefinito IMO.
Thilo


5

È possibile abilitare esplicitamente l'escape delle entità Xml utilizzando un valore di escapeXml dell'attributo uguale a true. Cordiali saluti, è "vero" per impostazione predefinita.


Un po 'di codice di esempio aiuterebbe davvero a completare questa risposta.
RachelD

4

Le versioni precedenti di JSP non supportavano la seconda sintassi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.