null

JSP exception: Attribute value is quoted with " which must be escaped ...

Относительно недавно при работе с одним проектом, основанном на JSP, я столкнулся с ошибкой в экранировании кавычек на строке, которая на первый взгляд не предвещала ничего плохого:

<aui:a href="<%= "/someValue" + userId %>"  label="<%= someTitle %>"/>.

ERROR [jsp:154] org.apache.jasper.JasperException: /jsp/projects/edit.jsp(16,55)
Attribute value ... is quoted with " which must be escaped when used within the value

Как выяснилось, в соответствии со спецификацией JSP 2.0, JSP выражение вида

<tags:someTag value="<%= "someValue" %>" />

является некорректным, так как требуется экранирование внутренних кавычек. Правильные варианты выглядят следующим образом:  

<tags:someTag value='<%= "someValue" %>' />
<tags:someTag value="<%= \"someValue!\" %>" />
<tags:someTag value='<%= \"someValue\" %>' />

Но что же делать в случае если нужно работать с уже готовым проектом, не соответствующим данной спецификации? К счастью есть несколько решений, которые могут избавить от необходимости исправлять кавычки по всему коду. (Я использовал Tomcat, решения приведены для него)

Для того, чтобы компилятор Jasper не требовал строгого экранирования можно:

1) Задать параметр CATALINA_OPTS

CATALINA_OPTS="-Xmx... -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false" 

2) Или добавить в файл ../tomcat/conf/catalina.properties строку:

org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false