有 JSP 变量 ${remoteFolder}
它的值是 \\file-srv\demo
使用嵌入在此 JSP 中的 jQuery。
jQuery 将 ${remoteFolder}
变量解析为 \file-srvdemo ,即一个斜线被删除。
如何保持这个var的初始值?
编辑 :当 ${remoteFolder}
在 form
标签内使用时,它解决了 OK。
编辑 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 的早期使用,用斜线就可以了/uploadFile?portletId=${portletId}&remoteFolder=${remoteFolder}">
最佳答案
这里有两个问题。
首先,\
是 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}")
+ "',";
关于JavaScript 从 JSP 变量中删除斜线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2265596/