Как кодировать HTML на языке выражений JSP?

Рассмотрим следующий фрагмент JSP:

<param name="FlashVars" value="${flashVars}" />

Значение ${flashVars} содержит амперсанды и должно быть закодировано перед выводом. Вместо этого JSP ожидает, что значение ${flashVars} будет частью HTML, и выводит амперсанды дословно, что приводит к плохому HTML.

Я обнаружил, что могу получить значение для кодирования, если напишу его так:

<param name="FlashVars" value="<c:out value="${flashVars}"/>" />

Но это выглядит действительно некрасиво и сбивает мою IDE с толку. Есть ли лучший способ получить такой же результат?


person Martijn    schedule 24.12.2010    source источник
comment
Если IDE - единственная проблема с вышеупомянутым, тогда получите другую IDE - Intellij IDEA отлично.   -  person Chii    schedule 24.12.2010
comment
Проверка JSP / EL в Eclipse - это сплошной провал. Я его выключил.   -  person BalusC    schedule 24.12.2010
comment
Моя главная проблема в том, что это выглядит некрасиво. :-) Я не хочу вкладывать тег в атрибут другого тега.   -  person Martijn    schedule 24.12.2010
comment
Однако я полностью согласен с этой частью :) См. Также JSTL, чтобы предотвратить раздел XSS в this ответ.   -  person BalusC    schedule 24.12.2010
comment
Я не виню Eclipse; это очень сложный, некомпозиционный язык шаблонов, который очень затрудняет правильное выделение / сообщение об ошибках без написания для него полного компилятора (это не работа Eclipse здесь, IMHO).   -  person Martijn    schedule 24.12.2010


Ответы (1)


Используйте fn:escapeXml().

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<param name="FlashVars" value="${fn:escapeXml(flashVars)}" />
person BalusC    schedule 24.12.2010