JSP: แท็ก <c: out> ของ JSTL


111

เขียนหน้า JSP ทำอะไรกันแน่<c:out>? ฉันสังเกตว่าทั้งสองอย่างต่อไปนี้ให้ผลลัพธ์เหมือนกัน:

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

คำตอบ:


153

c:out หลีกเลี่ยงอักขระ HTML เพื่อให้คุณสามารถหลีกเลี่ยงการเขียนสคริปต์ข้ามไซต์ได้

ถ้า person.name = <script>alert("Yo")</script>

สคริปต์จะดำเนินการในกรณีที่สอง แต่ไม่ใช่เมื่อใช้ c:out


2
เฉพาะในกรณีที่ 'escapeXML' ตั้งค่าเป็นจริง (ไม่แน่ใจว่าเป็นค่าเริ่มต้นหรือไม่)
Chris Serra

17
ฉันเชื่อว่ามันเป็นเรื่องจริงโดยปริยาย
Zack The Human

7
NB มันหนี XML ไม่ใช่ HTML หนึ่งในรายละเอียดปลีกย่อยที่น่ารำคาญของ JSTL ฉันเขียน HTML Escape EL fn ของตัวเองเสมอ
Adam Gent

4
ชื่อแอตทริบิวต์เป็นกรณีที่คำนึงถึงตัวพิมพ์เล็กและใหญ่ดังนั้นจึงเป็น escapeXml = "true" ไม่ใช่ escapeXML
Mark Chorley

2
ฉันไม่รู้ว่าตัวอย่างโค้ดของคำตอบนี้แสดงอะไร - มีใครชี้แจงได้บ้าง? มันกล่าวถึง "กรณีที่สอง" แต่ฉันไม่เห็นและฉันไม่เห็นว่ามีการใช้ c: out ในโค้ด
IcedDante

126

ตามที่กล่าวไว้ Will Wagner ใน jsp เวอร์ชันเก่าคุณควรใช้c:outเพื่อส่งออกข้อความไดนามิกเสมอ

นอกจากนี้การใช้ไวยากรณ์นี้:

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

คุณสามารถแสดงข้อความ "ไม่มีชื่อ" เมื่อชื่อเป็นโมฆะ


24
เย็น! ผมไม่ทราบว่า.
Adam Asham

ตกลงเย็น. ขอบคุณสำหรับการสอนและความช่วยเหลือ ฉันไม่รู้เหมือนกัน ไชโย!
B-Money

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

2
JSR 52 รุ่นการบำรุงรักษา 2 ดูหน้า 22 "พร้อมตัวถัง" Link: download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
บาเร็ตต์

1
@ บาเร็ตต์. เย็น. ฉันสงสัยว่าทำไมสิ่งนี้ไม่เคยทำแบบฝึกหัดหรือตัวอย่างเลย ไวยากรณ์ที่สะดวกกว่า IMO แอตทริบิวต์เริ่มต้น
Thilo


5

คุณสามารถเปิดใช้งานการหลีกเลี่ยงเอนทิตี Xml ได้อย่างชัดเจนโดยใช้ค่าคุณสมบัติ escapeXml เท่ากับ true FYI โดยค่าเริ่มต้นจะเป็น "จริง"


โค้ดตัวอย่างบางส่วนจะช่วยให้คำตอบนี้สมบูรณ์
RachelD

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.