javascript - 将 jSTL 列表传递给 onclick 事件下的 javascript 函数

标签 javascript jsp jstl

正如标题所说。 我从 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/

相关文章:

java - jqGrid组合框: how to add values Dynamically

java - 如何在 jsp 简单标记中设置/检索 applicationScope 属性?

jsp - java服务器页面转换为servlet?

jsp - JSTL标记中 'scope'属性的默认值是什么?

javascript - eventListnener 使用随机唯一 ID 动态创建内容

javascript - 使用 Web Workers 进行多核心负载管理怎么样?

java - 为什么 JSTL 使用 ${dollarAmount} 将 double 值 99 输出为 99.0(而不是 99.00)?

java - 如何处理 a :href 的值

javascript - 咕噜postcss "not found"

javascript - 返回值并插入数组,但在返回之外不可用