barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

среда, 29 февраля 2012 г.

Attribute value is quoted with " which must be escaped when used within the value

Проблема:

При использовании следующего кода:

<jsp:include page="includes/dataTable.inc.jsp" >
  <jsp:param name="fileName" value="<%=this.getServletContext().getRealPath("/WEB-INF/myfile.txt")%>" />
</jsp:include>
вываливается исключение:
org.apache.jasper.JasperException: Attribute value this.getServletContext().getRealPath("/WEB-INF/myfile.txt") is quoted with " which must be escaped when used within the value
Причем под Windows в Tomcat 6.0.10 все ок, а вот под Debian с версией Tomcat`а 6.0.28 ломается.

Причина:

Действительно, в соответствии со спецификацией JSP 2.0 так писать нельзя (https://issues.apache.org/bugzilla/show_bug.cgi?id=45015). И, похоже, в 6.0.28 некорректное поведение томката было поправлено.

Решение:

Например, заключить значение атрибута в одинарные кавычки:
<jsp:include page="includes/dataTable.inc.jsp" >  <jsp:param name="fileName" value='<%=this.getServletContext().getRealPath("/WEB-INF/myfile.txt")%>' /></jsp:include>
Можно, в принципе, и экранировать кавычки вокруг пути к файлу, но NetBeans подсвечивает такой синтаксис, как неверный.

1 комментарий: