1

私はいくつかのjspvarfooを持っていると言います

<c:set var="foo" value="foo's bar"/>

そして私は次のjsを持っています

<script>
 new SomeFunction('${foo}');
</script>

これは明らかにエラーを生成します

missing ) after argument list

ステートメントが最終的に

new SomeFunction('foo's bar');

ただし、引数$ {foo}を二重引用符で囲むだけでは不十分です。これは、fooの値の文字列に二重引用符が1つ含まれている可能性があるため、同じ問題が発生するためです。fooは任意の文字列である可能性があると想定します。例が明確になるように、fooのバーに設定するだけです。現在、私は次のように問題を解決しています:

<script>
 new SomeFunction('<c:out value="${foo}"/>');
</script>

およびSomeFunction内:

SomeFunction = new function(foo) {
  $(someSelector).text($("<div/>").html(foo).text());
}

この解決策はうまくいくようです-私がいくつかのコーナーケースを見逃していないと仮定します。ただし、これが最善の解決策であるとは確信していません。改善のための代替案や提案はありますか?その一時的なdivを使用することは、私には一種のハッキーのように思われます。私は、それが必要とされないソリューションを好みます。

4

3 に答える 3

3

Springを使用している場合は、これを行うことができます。

new SomeFunction('<spring:escapeBody javaScriptEscape="true">${foo}</spring:escapeBody>');
于 2014-06-16T04:04:20.267 に答える
0

Apache commons-langを使用して静的メソッドをStringEscapeUtils.escapeEcmaScript()実装(または自分で再実装)して特殊文字(一重引用符と二重引用符、改行、タブ)をエスケープし、この関数をEL関数にして、JSP内からこのEL関数を使用します。

new SomeFunction('${myFn:escapeJs(foo)}');

EL関数の作成方法については、このページの最後を参照してください。

于 2012-03-15T18:40:01.033 に答える
-1

c:outでescapeXmlを使用できます

 new SomeFunction('<c:out value="${foo}" escapeXml="true"/>');
于 2012-03-15T18:52:12.743 に答える