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>

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


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.


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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.