代码之家  ›  专栏  ›  技术社区  ›  flower

如何在JavaScript中从EL获取值

  •  2
  • flower  · 技术社区  · 9 年前

    我传递一个名为 student 到jsp,学生有一些属性 NAME,SEX,ADDRESS,PHONE 在js函数中,我想从学生那里得到一些属性。一开始,我尝试这样编码,但它不起作用。如何修复我的代码?

    //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 回复  |  直到 9 年前
        1
  •  2
  •   JM Yang    9 年前

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

        2
  •  -1
  •   Pankaj    9 年前

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

    //要使用JSTL访问hashmap中的值,您需要编写 "${student['NAME']}" .

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