[英]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_USER
和COMMON_USER
。
我假設您實際上實際上是想要一個JavaScript字符串數組,該字符串數組應寫為['ADMIN_USER', 'COMMON_USER']
。
您應該做的是在控制器中將Java數組轉換為JSON字符串,然后在JavaScript代碼中使用此JSON字符串:
showAuthorityOverlay(${jsonString})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.