JSP: tag <c: out> de JSTL

110

Escrevendo uma página JSP, o que exatamente isso <c:out>faz? Notei que os dois a seguir têm o mesmo resultado:

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

Respostas:

153

c:out escapa caracteres HTML para evitar scripts entre sites.

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

o script será executado no segundo caso, mas não ao usar c:out

Krosenvold
fonte
2
Somente se 'escapeXML' for definido como verdadeiro (não tenho certeza se é o padrão)
Chris Serra
17
Acredito que seja verdade por padrão.
Zack The Human
7
NB, escapa de XML, não de HTML. Uma das sutilezas mais irritantes do JSTL. Eu acabo sempre escrevendo meu próprio escape de HTML EL fn.
Adam Gent de
4
O nome do atributo diferencia maiúsculas de minúsculas, então é escapeXml = "true" e não escapeXML
Mark Chorley,
2
Não tenho ideia do que o exemplo de código desta resposta está mostrando - alguém pode esclarecer? Ele menciona um "segundo caso", mas não vejo isso e não vejo c: out sendo usado no código.
IcedDante,
126

Como disse Will Wagner, na versão antiga do jsp você deve sempre usar c:outpara gerar texto dinâmico.

Além disso, usando esta sintaxe:

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

você pode exibir o texto "Sem nome" quando o nome for nulo.

alexmeia
fonte
24
Legal! Eu não sabia disso.
Adam Asham
Concordo, legal. Obrigado por ensinar e ajudar. Eu também não sabia disso. Felicidades!
B-Money
20
ou <c: out value = "$ {person.name}" default = "No Name" />
gmustudent
2
JSR 52, versão de manutenção 2, consulte a página 22 "com um corpo". Link: download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
Barett
1
@Barett. Legal. Eu me pergunto por que isso nunca faz nenhum dos tutoriais ou exemplos. Uma sintaxe mais conveniente do que o atributo padrão IMO.
Thilo
5

Você pode habilitar explicitamente o escape de entidades Xml usando um valor de escapeXml de atributo igual a true. FYI, por padrão é "verdadeiro".

Greenhorn
fonte
Algum código de exemplo realmente ajudaria a tornar esta resposta completa.
RachelD
4

Versões mais antigas do JSP não suportavam a segunda sintaxe.

Will Wagner
fonte