JSP: Tag <c: out> JSTL


110

Menulis halaman JSP, apa sebenarnya fungsinya <c:out>? Saya perhatikan bahwa keduanya memiliki hasil yang sama:

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

Jawaban:


153

c:out lolos dari karakter HTML sehingga Anda dapat menghindari pembuatan skrip lintas situs.

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

skrip akan dieksekusi dalam kasus kedua, tetapi tidak saat menggunakan c:out


2
Hanya jika 'escapeXML' itu disetel ke true (tidak yakin apakah itu secara default)
Chris Serra

17
Saya yakin ini benar secara default.
Zack The Human

7
NB itu lolos dari XML bukan HTML. Salah satu seluk-beluk JSTL yang lebih menjengkelkan. Saya akhirnya selalu menulis escape HTML saya sendiri EL fn.
Adam Gent

4
Nama atribut peka huruf besar / kecil jadi escapeXml = "true" bukan escapeXML
Mark Chorley

2
Saya tidak tahu apa yang ditunjukkan oleh contoh kode jawaban ini- dapatkah seseorang menjelaskan? Ini menyebutkan "kasus kedua" tetapi saya tidak melihatnya dan saya tidak melihat c: out digunakan dalam kode.
IcedDante

126

Seperti yang dikatakan Will Wagner, di versi lama jsp Anda harus selalu menggunakan c:outuntuk mengeluarkan teks dinamis.

Selain itu, menggunakan sintaks ini:

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

Anda dapat menampilkan teks "Tanpa nama" jika nama kosong.


24
Keren! Saya tidak tahu hal itu.
Adam Asham

Setuju, keren. Terima kasih telah mengajar dan membantu. Saya juga tidak tahu itu. Bersulang!
B-Money

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

2
JSR 52, pemeliharaan rilis 2, lihat halaman 22 "dengan badan". Tautan: download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
Barett

1
@Tokopedia Keren. Saya bertanya-tanya mengapa ini tidak pernah membuat tutorial atau contoh apa pun. Sintaks yang lebih nyaman daripada atribut default IMO.
Thilo


5

Anda dapat secara eksplisit mengaktifkan pelolosan entitas Xml dengan menggunakan atribut nilai escapeXml sama dengan true. FYI, itu secara default "benar".


Beberapa kode contoh akan sangat membantu membuat jawaban ini lengkap.
RachelD

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.