我有一个JSP,它获取一个存储在后端对象中的任意字符串;称之为$ {state.status.code}。
我希望在单击表格元素时将此字符串传递给函数;我正在使用onClick来调用我的JS函数showStatus
。放在一起看起来像这样:
<c:set var="statusString" value="${state.status.code}" />
<td id="${rowId}"><a href="#"
class="pClass"
onClick="showStatus('${statusString}')>
Here be status
</a>
问题是statusString中可能有双引号或撇号,我无法弄清楚如何逃避它们。我一直在c:set
标记中尝试各种各样的事情:fn:replace
使用'和',StringEscapeUtils.escapeJavaScript(statusString)
和fn:escapeXml(statusString)。这可能就是其中之一,但是我将它放在错误的地方,由错误的人物划定,或者只是没有正确地对待。
我总是可以用一些任意的唯一字符串(“!#$#!”)代替它们,然后当我在showStatus中显示HTML弹出窗口时替换它们,但这对于这样一个看似简单的问题来说似乎真的很难看。有没有人有更好的解决方案?
答案 0 :(得分:0)
您可以尝试这种方式:
添加此依赖项
<dependency>
<groupId>org.owasp.esapi</groupId>
<artifactId>esapi</artifactId>
<version>2.1.0.1</version>
</dependency>
并以这种方式将参数传递给你的javascript函数
onclick="showStatus('<c:out value="${esapi:encodeForJavaScript(statusString)}" />')"
并且为了使用esapi标记,您必须在jsp中包含以下内容
<%@ taglib uri="http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API"prefix="esapi" %>
如果罐子丢失了 在META-INF目录中的esapi.tld,请在以下链接中阅读第一个答案: https://code.google.com/p/owasp-esapi-java/issues/detail?id=237
因为有一些步骤可以让它发挥作用。