我的页面上有一个链接,单击时会调用带有2个参数的方法。其中一个参数可能有特殊字符(即'或é等)。当我尝试传递这些变量时出现页面错误,所以我试图在传递它们之前对它们进行编码。如何调用encodeURIComponent inline?
我正在尝试这样做:
<a title="${facet.toolTipDisplay}" onclick="submitFacet('Company', '${encodeURIComponent(facet.javaScriptVar)}')">
我似乎得到了错误:
SEVERE: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: /WEB-INF/pages/SearchForm.jsp(831,126) The function encodeURIComponent must be used with a prefix when a default namespace is not specified
免责声明:我不熟悉Web内容,只能访问JSP页面,而不能访问facet.javaScriptVar来自的java类。
答案 0 :(得分:0)
您是否正在尝试使用Java或JS对UI组件进行编码?我认为最简单的方法是使用JS函数。编码方法将取决于要编码的字符,从不太独占到大多数escape(不适合uris),encodeUri和encodeUriComponent
<a title="${facet.toolTipDisplay}" onclick="submitFacet('Company',
'encodeURIComponent(${facet.javaScriptVar})'">
为了更礼貌,您可以在submitFacet函数中应用编码,只需传递Company和您的JSTL var。
阅读你的评论我建议在用JS处理它之前逃避va内容,否则将无法实现。
尝试以下两种方法之一:
onclick="submitFacet('<c:out value="${facet.javaScriptVar}"/>')"
onclick="submitFacet('${fn:escapeJava(facet.javaScriptVar)}')"
假设您导入Apache taglib。
答案 1 :(得分:0)
我决定只用“\'”替换撇号(逃脱撇号)。当我的函数被调用时,转义的撇号会像正常一样被撇号替换。
这就是HTML中的样子:
// arguments = Company, L\'Oréal (4)
onclick="submitFacet('Company', '${fn:replace(facet.toolTipDisplay, "'", "\\'")}')"
然后调用submitFacet函数时的样子:
"Company", "L'Oréal (4)"