Почему Oracle ADF не экранирует кавычки для меня, когда я использую? - PullRequest
0 голосов
/ 14 сентября 2010

Почему Oracle ADF не экранирует кавычки для меня, когда я использую для создания строк в Javascript?

<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.

настоящий текст написан на ирландском языке с акцентированными символами, и я вижу, что акцентированные символы экранируются, но не кавычки.

Ответы [ 2 ]

3 голосов
/ 14 сентября 2010

Потому что одинарные кавычки не запрещены в 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 голосов
/ 14 сентября 2010
<h:outputText value='#{msg['getDetails.validate.regNum']}"/>

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

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

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

...