4

JSP変数を持っている${remoteFolder}

値は\\file-srv\demoです

このJSPに埋め込まれたjQueryを使用します。

jQueryは${remoteFolder}変数を\file-srvdemoとして解決します。つまり、1つのスラッシュが削除されます。

この変数の初期値を維持するにはどうすればよいですか?

編集済み:タグ${remoteFolder}内で使用された場合、問題なく解決されました。form

編集2:

JSPのJS部分では、スラッシュが削除されます。

  <script>
        var oScript = document.createElement("script");
        oScript.type = "text/javascript";
        oScript.text = "var $j = jQuery.noConflict();";
        oScript.text+= "$j(document).ready(function(){";
        ...
       oScript.text+= "'script':'<%= request.getContextPath()   %>/uploadFile?portletId=${portletId}&remoteFolder=${remoteFolder}',";
        ...
        oScript.text+= "});"; 
        document.body.appendChild(oScript);        
    </script>

編集済み3:

以前の${remoteFolder}varの使用法は、スラッシュですべて問題ありませんでした<form enctype = "multipart / form-data" method = "post" target = "uploadFrame" action = "<%= request.getContextPath()%> / uploadFile?portletId = $ {portletId}&remoteFolder = $ {remoteFolder}">

4

4 に答える 4

5

ここには2つの問題があります。

まず、これ\はJS文字列のエスケープ文字です。JS文字列でを表現する場合\は、ダブルエスケープする必要があります\\。最も簡単な方法は、これにJSTL fn:replaceを使用することです。

var jsVariable = "${fn:replace(javaVariable, '\\', '\\\\')}";

次に、URLパラメータとして送信します。は\URLパラメータの不正な文字です。URLエンコードする必要があります。最も簡単な方法は、これにJavascriptのescape()関数を使用することです。

var urlParameter = escape(jsVariable);

要約すると、

oScript.text+= "'script':'<%= request.getContextPath()   %>/uploadFile?portletId=${portletId}&remoteFolder=${remoteFolder}',";

に置き換える必要があります

oScript.text += "'script':"
    + "'${pageContext.request.contextPath}/uploadFile"
    + "?portletId=${portletId}"
    + "&remoteFolder=" + escape("${fn:replace(remoteFolder, '\\', '\\\\')}")
    + "',";

または、ファイルパス区切り文字/の代わりに使用することもできます。\これはWindowsでも完全に機能します。文字列で使用するためにそれらをエスケープする必要はありませんが、それでもURLエンコードする必要があります。

oScript.text += "'script':"
    + "'${pageContext.request.contextPath}/uploadFile"
    + "?portletId=${portletId}"
    + "&remoteFolder=" + escape("${remoteFolder}")
    + "',";
于 2010-02-15T13:30:06.567 に答える
2

それはjQueryではなくJavaScriptです。追加のバックスラッシュを使用してJavaScript文字列リテラルを作成する場合は、保持するバックスラッシュをエスケープする必要があります。

于 2010-02-15T11:41:42.287 に答える
2

いくつかの重要な関数を含む独自のEL関数ライブラリがないと、本格的なWebアプリケーションを作成できないことがわかりました。その中には、「jsQuote」(または、気分によっては「escapeJS」)関数があります。この関数の目的は、展開された文字列を「保護」して、Javascript文字列定数にドロップできるようにすることです。fn:escapeXml()これは、HTML構文を対象とするのではなく、Javascriptを対象とすることに類似しています。通常、バックスラッシュ、引用符、改行、その他の一般的な制御文字、および7ビットの印刷可能範囲外の文字をチェックする必要があります。このような関数を使用すると、いつでも安全に次のようなことができます。

<script>
  // ...
  var s = 'A string ${yourLib:escapeJS(some.java.bean.property)} constant';
  // ...
</script>

そのようなことがJSTL標準の一部になることを本当に望んでいますが、私は期待していません。幸いなことに、書くのは本当に簡単です。

于 2010-02-15T13:31:01.057 に答える
1

javascriptsは\をエスケープ文字として解釈するため、 \\\\ file-srv \\ demoに設定$remotefolderしてみてください。これにより、\を出力するには\\が必要になります。

于 2010-02-15T11:41:09.230 に答える