0

正如标题所说。我从控制器中得到了一个对象,它的一个属性是一个列表。现在我想将此列表传递给外部文件 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 参数正确传递。

4

1 回答 1

4

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_USERCOMMON_USER.

我假设您实际上想要一个 JavaScript 字符串数组,它应该写为['ADMIN_USER', 'COMMON_USER'].

您应该做的是在控制器中将 Java 数组转换为 JSON 字符串,然后在 JavaScript 代码中使用此 JSON 字符串:

showAuthorityOverlay(${jsonString})
于 2013-04-10T15:13:30.910 回答