簡體   English   中英

在onclick事件下將jstl列表傳遞給javascript函數

[英]passing a jstl list to a javascript function under onclick event

如標題所示。 我從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>

但是仍然得到相同的結果。 看起來值未正確傳遞為List參數。

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_USERCOMMON_USER

我假設您實際上實際上是想要一個JavaScript字符串數組,該字符串數組應寫為['ADMIN_USER', 'COMMON_USER']

您應該做的是在控制器中將Java數組轉換為JSON字符串,然后在JavaScript代碼中使用此JSON字符串:

showAuthorityOverlay(${jsonString})

JSP JSTL

[英]JSP JSTL <a href call Onclick Javascript function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM