正如标题所说。 我从Controller获得了一个对象,其中一个属性是List。 现在我想将此List传递给外部文件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>
但仍然得到相同的结果。看起来这些值没有作为List参数正确传递。
答案 0 :(得分:4)
JSTL代码在服务器端执行。在这种情况下,它不是用于生成HTML,而是用于生成JavaScript代码(完全有效)。
列表的toString()
方法,<c:out>
调用,返回列表中每个Java对象的toString表示形式,用逗号分隔它们,并用括号括起来。最终结果是
[ADMIN_USER, COMMON_USER]
然后,浏览器会下载生成HTML + JavaScript,解释JavaScript代码:
showAuthorityOverlay([ADMIN_USER, COMMON_USER]);
这种情况(偶然)发生在语法上正确的JavaScript代码中。这意味着:使用JavaScript数组作为参数调用函数showAuthorityOverlay()
。该数组包含两个JavaScript变量ADMIN_USER
和COMMON_USER
的值。
我认为你实际上想要一个JavaScript数组字符串,应该写成['ADMIN_USER', 'COMMON_USER']
。
您应该做的是将Java数组转换为控制器中的JSON字符串,然后在JavaScript代码中使用此JSON字符串:
showAuthorityOverlay(${jsonString})