Здесь есть две проблемы.
Во-первых, \
- это escape-символ в строках 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}")
+ "',";