JSP: тег <c: out> JSTL


110

Написавши сторінку 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" встановлено значення true (не впевнений, що це за замовчуванням)
Chris Serra

17
Я вважаю, що це правда за замовчуванням.
Zack The Human

7
Зверніть увагу: вона уникає XML, а не HTML. Одна з найприємніших тонкощів JSTL. Я в кінцевому підсумку завжди пишу свій власний HTML escape EL fn.
Адам Гент

4
Ім'я атрибута чутливе до регістру, тому це escapeXml = "true" не escapeXML
Марк Чорлі

2
Я поняття не маю, що показує зразок коду цієї відповіді - може хтось уточнити? Він згадує "другий випадок", але я цього не бачу і не бачу c: out, що використовується в коді.
IcedDante

126

Як сказав Вілл Вагнер, у старій версії jsp ви завжди повинні використовувати c:outдля виведення динамічного тексту.

Крім того, використовуючи цей синтаксис:

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

ви можете відобразити текст "Без імені", коли ім'я є недійсним.


24
Класно! Я не знаю, що.
Адам Ашам

Домовились, круто. Дякуємо за навчання та допомогу. Я теж цього не знав. Ура!
B-Money

20
або <c: out value = "$ {person.name}" за замовчуванням = "Без імені" />
gmustudent

2
JSR 52, випуск 2 для обслуговування, див. Сторінку 22 "з корпусом". Посилання: download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
Barett

1
@Barett Класно. Цікаво, чому це ніколи не дає жодного навчального посібника чи прикладу. Більш зручний синтаксис, ніж атрибут IMO за замовчуванням.
Тіло


5

Ви можете явно увімкнути біг з об'єктів Xml, використовуючи атрибут значення escapeXml, що дорівнює істинному. FYI, за замовчуванням це "true".


Деякі приклади коду справді допоможуть виконати цю відповідь.
РейчелД

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.