正如标题所说。 我从 Controller 获得了一个对象,其属性之一是列表。 现在我想将此列表传递给外部文件 JavaScript 函数。
类似这样的事情:
<a href="#" onClick="showAuthorityOverlay(<c:out value='${userDetail.grantedAuthorityList}'/>)">[SHOW AUTHORITY]</a>
现在传递给 JavaScript 的值是这样的:
[ADMIN_USER、COMMON_USER]
因此,当我单击该链接时,我收到一个 JavaScript 错误:
ADMIN_USER 未定义。
这里出了什么问题?是否以 ADMIN_USER 和 COMMON_USER 作为变量名?或者是什么?有点奇怪。
甚至尝试在我的 jsp 中制作一个内部脚本来获取如下列表:
<script type="text/javascript>
function showAuthorityOverlay() {
var obj = "<c:out value='${userDetail.grantedAuthorityList}'/>";
sendToExternalJSFile(obj);
}
</script>
但仍然得到相同的结果。看起来这些值没有作为列表参数正确传递。
最佳答案
JSTL代码在服务器端执行。在本例中,它不是用于生成 HTML,而是用于生成 JavaScript 代码(这是完全有效的)。
toString()
您的列表的方法,其中 <c:out>
调用,返回列表中每个 Java 对象的 toString 表示形式,用逗号分隔它们,并用方括号将它们括起来。最终结果是
[ADMIN_USER, COMMON_USER]
然后浏览器下载生成的 HTML + JavaScript,并解释 JavaScript 代码:
showAuthorityOverlay([ADMIN_USER, COMMON_USER]);
这(偶然)是语法正确的 JavaScript 代码。意思是:调用函数showAuthorityOverlay()
以 JavaScript 数组作为参数。该数组包含两个 JavaScript 变量 ADMIN_USER
的值和COMMON_USER
.
我假设您实际上想要一个 JavaScript 字符串数组,它应该写为 ['ADMIN_USER', 'COMMON_USER']
.
您应该做的是将 Java 数组转换为 Controller 中的 JSON 字符串,然后在 JavaScript 代码中使用此 JSON 字符串:
showAuthorityOverlay(${jsonString})
关于javascript - 将 jSTL 列表传递给 onclick 事件下的 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15929552/