EL 表达式

EL表达式

从名字可以看出相当于<%= ..%> 只能读,不能写。在jsp文件中可以在HTML中直接使用EL。

<div>
1+2的值是:${1+2 }
</div>

如果在jstl中被当做属性值来用时,放在引号之间"${1+2}" 
<C:out value="${true == false}"/> 输出结果为false

访问JavaBean例子

index.jsp文件内部使用例子:
<jsp:useBean id="student" class = "xmlweb.Student" scope="session" />
<jsp:setProperty property="age" name="student" value="12"/>
<c:out value="${student.age }"/>
<a href="foo.jsp">Go to foo.jsp</a>

由于scope是Session的,如果不用EL在其他文件比如foo.jsp中使用:
因为必须要先声明bean,所以下面要写成两句,而且scope如果不设置的话默认不会和index.jsp的bean连接。
<jsp:useBean id="student" class="xmlweb.Student" scope="session"/>
<jsp:getProperty property="age" name="student" /><br>

如果用EL表达式则十分简单,EL表达式会按照从小到到的范围page->request->session->app查找
${sessionScope.student.age }

EL表达式的.和[]

如上面的例子,如果想访问session范围内的student则只需要用.即可。但是EL有一个限制,在用点的时候,变量名必须是全字母。
如果是有其他特殊符号比如下划线stud_ent则无法使用。
这时使用:${sessionScope["stud_ent"]["age"]} 
也可以是混用的:${sessionScope["stud_ent"].age }

上面的用法主要用于防止属性中不必要的误会,比如用Java.lang时如果直接展开
应该是${sessionScope["java.lang"] } 而不应该是 ${sessionScope.java.lang }

EL可以进行自动类型转换

index.jsp?score=10
${param.score + 11 } 结果为21
如果同样适用request.getParameter("score") + 11 则结果为字符串1011

index.jsp?name=abc
${param.name.length() } //由于获取的是字符串,可以直接调用String类的所有函数。

和Servlet一样,EL也有内置对象:

${pageScope.username}
${requestScope.username}
${sessionScope.username}
${applicationScope.username}

在一个页面进行设置web app属性值,
application.setAttribute("time", new Date);
application.getAttribute("time")取得的是Object不够方便,EL会自动转换类型,
在web app人一个位置可以取得${applicationScope.time.Method }

param = request.getParameter 
paramValues = request.getParameterValues
获取一组值,比如:/foo.jsp?name=A&name=B name有两个值,获取第一个的方法为:
${paramValues.name[0] }

※重要隐藏对象pageContext = Servlet的PageContext类

可以读取(不可写)所有不带参数的属性getXXX
${pageContext.request.contextPath } //获取当前web app
${pageContext.request.* }
${pageContext.response.* }
${pageContext.servletContext.* }
${pageContext.exception.* }
...
其他的隐藏属性一般不用。
header
headerValues
coookie
initParam

EL支持的运算符
+ - * / % && and || or  ! not > < = 

三目运算符

${param.score > 60 ? "及格":"不及格" }

※empty运算符,判断集合是否存在,或者非空

<%
List<String> names = new ArrayList<String>();
request.setAttribute("names", names);
%>
${empty requestScope.names } //返回True

${empty requestScope.namesXXX } //集合不存在时,也返回True

<完>

你可能感兴趣的:(EL 表达式)