2015-09-13 74 views
3

我將一個名爲student的地圖對象傳遞給jsp,並且學生擁有一些屬性,如NAME,SEX,ADDRESS,PHONE等等。現在在js函數中我想從學生處獲得一些屬性。起初,我嘗試這樣編碼,但它不起作用。如何解決我的代碼?如何從JavaScript中獲得EL值

//get the value from the key,I write "${student.NAME}" is OK. 
function initSelection(key){ 
console.log("key:"+key+"value:"+("${student."+key+"}")); 
} 
$(function() { 
     initSelection("NAME"); 
     initSelection("SEX"); 
     initSelection("PHONE"); 
} 

回答

2

EL代碼運行在服務器端,而Javascript代碼在瀏覽器中運行。

此行是混合服務器端和客戶端的代碼,就無法正確運行:

console.log("key:"+key+"value:"+("${student."+key+"}")); 

這裏的$表達{} student.xxx將只在客戶端完成因爲key是一個JS變量,但它需要在服務器端運行以獲得期望值作爲EL表達式。

如果你可以使用JSTL,不希望引入可在服務器端的Java對象轉換成JSON字符串任何庫,這個代碼可以改爲:

var values = {}; 
<c:forEach var="item" items="${student}"> 
values['${item.key}'] = '${item.value}'; 
</c:forEach> 

function initSelection(key){ 
    console.log("key:"+key+"value:"+values[key]); 
} 
$(function() { 
     initSelection("NAME"); 
     initSelection("SEX"); 
     initSelection("PHONE"); 
}); 

在服務器端的地圖內容用於生成填充JS變量「值」的JS源代碼。在客戶端,iniSelection()函數可以獲取'values'變量中的值。此代碼適用於學生地圖中沒有單引號字符的情況。

-1

您在地圖中傳遞變量並且您在Javascript函數中以錯誤的方式訪問它。

//使用JSTL訪問hashmap中的值需要編寫 "${student['NAME']}"

function initSelection(key){ 
var name=${student['NAME']}; 

} 
$(function() { 
     initSelection("NAME"); 
     initSelection("SEX"); 
     initSelection("PHONE"); 
} 
+0

我總是使用EL,像$ {student ['NAME']}在JSP中獲取超出地圖的值。但我剛剛嘗試過,$ {student.NAME}也有效,就像問題中提到的花一樣。 –