1、为什么要用EL表达式?
为了使JSP写起来更加简单,使用起来更方便,避免了在jsp页面嵌套Java代码。
例如:< %=request. getParameter(“username”)% > 等价于 ${ param. username },<%=user.getAddr( ) %> 等价于 ${user.addr}
2、要想在jsp页面使用EL表达式,应该注意什么?
首先查看web.xml中配置的<web-app>
标签,jsp servlet版本
使用Servlet2.4的描述符的JSP页面默认是解析EL表达式,即表达式有效。而使用Servlet2.3或者更早的描述符的JSP页面默认是忽略EL表达式的,即不解析EL表达式,就导致了出现EL表达式无效
如果想在某个页面使用el表达式可以在在使用el表达式的jsp中配置:<%@page isELIgnored="false" %>
如果想在所有页面使用el表达式,要么直接修改web.xml的版本。要么添加配置:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>false</el-ignored>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
</jsp-config>
3、EL的基本语法
EL表达式语法:以${开头,以}结束,中间为合法的表达式
具体语法格式如下:${expression}
参数说明:expression:指定要输出的内容,可以是字符串,也可以是由EL运算符组成的表达式。
EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到,再依序到Request、Session、Application范围。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null,当然EL表达式还会做出优化,页面上显示空白,而不是打印输出NULL。
EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:
${sessionScope.user.sex}等于${sessionScope.user["sex"]}
. 和 [ ] 也可以同时混合使用,如下:
${sessionScope.shoppingCart[0].price}
回传结果为shoppingCart中第一项物品的价格。
不过,以下两种情况,两者会有差异:
(1) 当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或数字的符号,就一定要使用 [ ],例如:${user.My-Name }
上述是不正确的方式,应当改为:${user["My-Name"] }
(2) 我们来考虑下列情况:
${sessionScope.user[data]}
此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex};
假若data 的值为"name"时,它就等于${sessionScope.user.name}。因此,如果要动态取值时,就可以用上述的方法来做,但. 无法做到动态取值。
4、结合实际举例
例如在页面展示的时候,我想在前台获取后台传过来的一个map,通过key值,获取自己想要的信息
后台代码:
Map<String, Object> tagStaffIds
model.addAttribute("tagStaffIds", JSONObject.fromObject(tagStaffIds).toString()); //最好先将Map 变成json字符串。然后传递到前台
前台代码:
var tsMap = eval('(' + '${tagStaffIds}' + ')');
var tagStaffName=“”;
for(var i = 0; i < tidsArr.length; i++){
var key = tidsArr[i];
var value = tsMap[key];
if(value.tagSids!=""){
tagStaffName += value.tagName;
tagStaffName += ",";
}
}