如何从 JavaScript 中的 EL 获取值

How can I get a value from EL in JavaScript

我将一个名为 student 的地图对象传递给 jsp 并且学生在 js 函数中有一些 属性 像 NAME,SEX,ADDRESS,PHONE 等 on.Now我想先从 student.At 得到一些 属性,我尝试这样编码,但它不会 work.How 修复我的代码?

//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");
}

您在 map 中传递了一个变量,而您在 Javascript 函数中以错误的方式访问它。

//TO access value in hashmap using JSTL you need to write "${student['NAME']}".

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

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

EL 代码 运行s 在服务器端,而 Javascript 代码 运行s 在浏览器中。

这一行是服务器端和客户端代码的混合,它将无法 运行 正确:

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 源代码 'values'。在客户端 iniSelection() 函数可以获取 'values' 变量中的值。当学生地图中没有使用单引号字符时,此代码有效。