拥有JSP变量${remoteFolder}
它的价值是 \\ file-srv \ demo
使用此JSP中嵌入的jQuery。
jQuery将${remoteFolder}
变量解析为 \ file-srvdemo ,即。删除了一个斜杠。
如何保留此var的初始值?
已修改:在${remoteFolder}
代码中使用form
时,已解决该问题。
edited2:
JS的一部分JSP,斜杠被剥离了..
<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>
edited3:
早期使用${remoteFolder}
var,用斜杠都可以
&LT; form enctype =“multipart / form-data”method =“post”target =“uploadFrame”action =“&lt;%= request.getContextPath()%&gt; / uploadFile?portletId = $ {portletId}&amp; remoteFolder = $ { remoteFolder}“&GT;
答案 0 :(得分:5)
这里有两个问题。
首先,\
是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}")
+ "',";
答案 1 :(得分:2)
那是JavaScript而不是jQuery。在使用额外的反斜杠创建JavaScript字符串文字时,您需要转义要保留的任何反斜杠。
答案 2 :(得分:2)
我发现如果没有自己的EL函数库并且其中包含一些关键函数,我就无法编写一个严肃的Web应用程序。其中包括“jsQuote”(或“escapeJS”,取决于我所处的心情)功能,其目的是“保护”扩展的字符串,以便将它们放入Javascript字符串常量中。它类似于fn:escapeXml()
,但它不是针对HTML语法,而是以Javascript为目标。一般来说,它必须检查反斜杠,引号字符,换行符和&amp;其他常用控制字符,然后是7位可打印范围之外的任何字符。有了这样的功能,你总能安全地做这样的事情:
<script>
// ...
var s = 'A string ${yourLib:escapeJS(some.java.bean.property)} constant';
// ...
</script>
我真的希望这样的事情能成为JSTL标准的一部分,但我没有希望。幸运的是,写起来真的很容易。
答案 3 :(得分:1)
尝试将$remotefolder
设置为 \\\\ file-srv \\ demo ,因为javascripts会将\解释为转义字符,因此需要\\打印\。