Неожиданный идентификатор при введении значения в javascript [дубликат]

Это также хорошо для Unit Testing, вы можете вводить свои собственные классы (отвечающие требованиям интерфейса) в класс, который зависит от него

4
задан BalusC 11 August 2015 в 07:17
поделиться

1 ответ

Косая черта не является escape-символом. Это обратная косая черта.

${fn:replace(Desc, "'", "\\'")}

(да, это было представлено дважды, потому что это также escape-символ в Java!) [/ ​​g2]

Однако вам нужно не только для возврата ' на \', вам также нужно заменить \n (новые строки) на \\n. Строка печатается по нескольким строкам, что делает ее также недопустимой строковой переменной JS. Ваш конечный результат должен в основном выглядеть следующим образом:

var itemNameList = ''
    + '\nWeyland Estate Santa Barbara Pinot Noir'
    + '\nRaymond \'Prodigal\' North Coast Cabernet Sauvignon'
    + '\nChateau Haute Tuque'; 

(обратите внимание, что синтаксический ярлык согласен на меня здесь, но не на вашем)

Однако есть много более возможных специальных символов, которые должны быть экранированы. Все они покрыты Apache Commons Lang StringEscapeUtils#escapeEcmaScript() . Намного легче создать пользовательскую функцию EL, которая вызывает именно этот метод. Если это еще не сделано, загрузите и отпустите commons-lang.jar в /WEB-INF/lib. Затем создайте файл /WEB-INF/functions.tld следующим образом:

<?xml version="1.0" encoding="UTF-8" ?>
<taglib 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">

    <display-name>Custom Functions</display-name>    
    <tlib-version>1.0</tlib-version>
    <uri>http://example.com/functions</uri>

    <function>
        <name>escapeJS</name>
        <function-class>org.apache.commons.lang3.StringEscapeUtils</function-class>
        <function-signature>java.lang.String escapeEcmaScript(java.lang.String)</function-signature>
    </function>
</taglib>

Чтобы вы могли использовать его следующим образом:

<%@taglib prefix="util" uri="http://example.com/functions" %>
...
${util:escapeJS(Desc)}
14
ответ дан BalusC 18 August 2018 в 12:05
поделиться
  • 1
    Спасибо, что прояснил это - это здорово! – jrutter 15 March 2012 в 15:14
  • 2
    Пожалуйста. – BalusC 15 March 2012 в 15:30
  • 3
    Spring имеет готовый тег для этого: s: escapeBody , поэтому, если вы используете Spring, вы можете использовать его без определения собственных собственных тегов. – David Balažic 29 January 2016 в 17:20
  • 4
    OmniFaces также имеет один: : escapeJS – BalusC 29 January 2016 в 17:21
  • 5
    s: escapeBody должен быть отдельным ответом @ DavidBalažic – Дмитрий Кулешов 18 July 2017 в 11:31
Другие вопросы по тегам:

Похожие вопросы: