JSP: tag <c: out> JSTL


110

Pisząc stronę JSP, co dokładnie robi <c:out>? Zauważyłem, że oba mają ten sam wynik:

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

Odpowiedzi:


153

c:out wymyka znaki HTML, dzięki czemu można uniknąć skryptów między witrynami.

Jeśli person.name = <script>alert("Yo")</script>

skrypt zostanie wykonany w drugim przypadku, ale nie podczas używania c:out


2
Tylko jeśli 'escapeXML' jest ustawione na true (nie jestem pewien, czy jest to ustawienie domyślne)
Chris Serra,

17
Uważam, że domyślnie jest to prawda.
Zack The Human

7
Uwaga: ucieka z XML, a nie HTML. Jedna z bardziej irytujących subtelności JSTL. W końcu zawsze piszę własny HTML escape EL fn.
Adam Gent,

4
W nazwie atrybutu rozróżniana jest wielkość liter, więc jest to escapeXml = "true", a nie escapeXML
Mark Chorley

2
Nie mam pojęcia, co pokazuje przykład kodu tej odpowiedzi - czy ktoś może to wyjaśnić? Wspomina o „drugim przypadku”, ale nie widzę tego i nie widzę, aby c: out był używany w kodzie.
IcedDante

126

Jak powiedział Will Wagner, w starej wersji jsp powinieneś zawsze używać c:outdo generowania dynamicznego tekstu.

Co więcej, używając tej składni:

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

możesz wyświetlić tekst „No name”, gdy nazwa jest pusta.


24
Chłodny! Nie wiedziałem tego.
Adam Asham

Zgoda, spoko. Dzięki za nauczanie i pomoc. Tego też nie wiedziałem. Twoje zdrowie!
B-Money

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

2
JSR 52, wydanie konserwacyjne 2, patrz strona 22 „z korpusem”. Link: download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
Barett,

1
@Barett. Chłodny. Zastanawiam się, dlaczego to nigdy nie tworzy żadnego z samouczków ani przykładów. Wygodniejsza składnia niż domyślny atrybut IMO.
Thilo,


5

Możesz jawnie włączyć ucieczkę jednostek XML, używając atrybutu wartości escapeXml równej true. FYI, domyślnie jest to „prawda”.


Przykładowy kod naprawdę pomógłby uzupełnić tę odpowiedź.
RachelD

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.