2010-09-14 2 views
0

Почему Oracle ADF не избегает кавычек для меня, когда я использую для создания строк в Javascript?Почему Oracle ADF не избегает кавычек для меня, когда я использую <h: outputText />?

<jsp:root ...> 
<f:view ...> 
    <afh:html> 
    <f:loadBundle basename="message" var="msg"/> 
    <afh:head ...> 
    <script> 
    function validate() { 
     var errorMessages = ''; 
     . 
     . 
     if (regNum == '') { 
     errorMessages = errorMessages + '<h:outputText value='#{msg['getDetails.validate.regNum']}"/>' + '\r\n'; 
     } 
     . 
     . 

В моем файле ресурсы сообщения У меня есть что-то вроде

getDetails.validate.regNum=I'd enter the registration number if I were you. 

Реальный текст находится в ирландском с диакритическими знаками, и я могу видеть, что акцентированные символы получают спаслись, но не кавычка.

ответ

3

Поскольку отдельные кавычки не являются незаконными в HTML.

Но они в JS. Вы можете использовать fn:replace(), чтобы избежать их.

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
... 
<script> 
    var foo = '<h:outputText value="#{fn:replace(msg['getDetails.validate.regNum'], "'", "\'")}"/>'; 
2
<h:outputText value='#{msg['getDetails.validate.regNum']}"/> 

Намерение JSF компонента outputText испускать символьные данные (он может излучать в стиле span элемента, например). Хотя точная форма, выдаваемая ее рендерером, является деталью реализации, ничто в ее спецификации не указывает, что оно подходит для кодирования литералов типа атрибута или JavaScript.

Текстовое содержимое, как правило, будет испускаться методами ResponseWriter.writeText. Знаки марки не обязательно должны быть экранированы в символьных данных.

Кодировка символов с акцентом либо из-за отсутствия в кодировке ответа, либо чрезмерно осторожной реализации ResponseWriter, которая защищает от проблем с кодировкой. Символы в наборе ASCII вряд ли будут экранированы таким образом.