EL表达式,EL特点,语法,运算符,EL隐式对象,JSTL标准标签库介绍

来源:互联网 发布:国际数据公司招聘 编辑:程序博客网 时间:2024/05/15 01:51

为什么需要EL:

JavaBeanJSP中的局限

获取JavaBean属性必须要实例化

强制类型转化

<%

    Employee employee = (Employee)request.getAttribute("employee");

    Computer comp = employee.getComputer();

    String manufacturer = comp.getManufacturer();

%>

如果页面编写出现逻辑错误,将会导致代码执行错误,并且JSP页面编译页面时也会产生错误

解决办法: 使用EL表达式简化

什么是EL表达式:

什么是EL 

ELExpression Language(表达式语言)

EL的功能

替代JSP页面中的复杂代码

EL的语法

${  EL exprission }

${  bean.name } 或  ${  bean['name'] }

${bean.name}实质是调用beangetName()方法

EL的特点:

自动转换类型 

EL得到某个数据时可以自动转换类型 

对于类型的限制更加宽松

使用简单 

相比较在JSP中嵌入Java代码,EL应用更简单

EL的语法:

EL语法 

“${”作为开始,以“}”作为结束

直接使用变量名获取值$

${  username }

变量属性范围名称

page pageScope,例如${pageScope.username},表示在page范围内查找username变量,找不到返回Null

request requstScope

session sessionScope

application applicationScope

EL中的运算符

EL运算符

运算符”[ ]”

运算符”.”

作用: 

获取对象属性   ${user.name}==${user[name]}

获取对象集合中的数据:  

Session中保存了一个(list)集合users

${sessionScope.user[1]}------------得到集合中第二位的对象

EL表达式的简单应用:

<%

    Map names = new HashMap();

    names.put("one","LiYang");

    names.put("two","WangHua");

    request.setAttribute("names",names);

%>

姓名:${names.one}<br/>

姓名:${names["two"] }<br/>

EL隐式对象:

作用域访问对象:  pageScope ,requestScope,  sessionScope ,applicationScope

参数访问对象:  param    paramValues

Jsp隐式对象:pageContext

EL隐式对象介绍 

pageScope 返回页面范围的变量名,这些名称已映射至相应的值

requestScope 返回请求范围的变量名,这些名称已映射至相应的值

sessionScope 返回会话范围的变量名,这些名称已映射至相应的值

applicationScope 返回应用范围内的变量,并将变量名映射至相应的值

param 返回客户端的请求参数的字符串值

paramValues 返回映射至客户端的请求参数的一组值

pageContext 提供对用户请求和页面信息的访问

为什么使用JSTL:

分析:虽然EL表达式可以访问JavaBean的属性,但是并不能实现在JSP中进行逻辑判断,因而要使用JSTL标签。

什么是JSTL

使用JSTL实现JSP页面中逻辑处理

什么是JSTL

JSTLJavaServerPages Standard Tag LibraryJSP标准标签库

JSTL的优点:1.提供一组标准标签

             2.可用于编写各种动态JSP页面

JSTL通常会与EL表达式合作实现JSP页面的编码

JSTL标准标签库介绍:

 JSTL标准标签库内的标签:

通用标签(set   remove   out

条件标签(if

迭代标签 (forEach)

通用标签的使用:

set:设置指定范围内的变量值

out:计算表达式并将结果输出显示

remove:删除指定范围内的变量

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

<body>

<c:set var= "example" value="${100+1}" scope="session"  />

<c:out value="${example}"/>

<c:remove var= "example" scope="session"/>

</body>

<body>

<!-- 设置之前应该是空值 -->

设置变量之前的值是:msg=<c:out value="${msg}" default="null"/>

<!-- 给变量msg设值 -->

<c:set var="msg" value="Hello ACCP!" scope="page"></c:set>

<!-- 此时msg的值应该是上面设置的"已经不是空值了" -->

设置新值以后:msg=<c:out value="${msg}"></c:out><br>

<!-- 把 msg变量从page范围内移除-->

<c:remove var="msg" scope="page"/>

<!-- 此时msg的值应该显示null -->

移除变量msg以后:msg=<c:out value="${msg}“ default="null">

</c:out>

</body>

条件标签的使用

ifif标签用于判断条件是否成,与Java中的If语句做用用相同

语法

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<c:if   test="codition"    var="name"    scope="applicationArea" >

</c:if>

test: 判断条件表达式  返回true/false 

var:  变量名用于保存返回的true/false   

scope:  指定var变量的作用域   

<body>

<c:set var="isLogin" value="${not empty sessionScope.userId}"/>

<c:if test="${not login}">

…登录表单

</form>

</c:if>

<c:if test="${isLogin}">

已经登录!

</c:if>

</body>

迭代标签

实现对集合中对象的遍历

语法

<c:forEach     items=collection         var=name    begin=start   end=end  step=count>

…循环体代码…

</forEach>

items:  items指定要遍历的集合对象

var:  var指定集合内数据的变量名称

step指定迭代的增量

begin指定从集合的第几位开始

end指定迭代到集合的第几位结束

forEachfor循环语句的变体,实现集合对象(可以是list、数组等)的处理 

指定迭代的次数

<c:forEach   var="varName"     varStatus="vatStatusName"    begin="start"   end="end"  step="count">

…循环体代码…

</forEach>

var指定集合内数据的变量名称

varStatus指定var成员的信息

迭代标签的应用:

<%

List products = GoodsDao.getAllProducts();

request.setAttribute("products", products);

%>

<!-- 循环输出商品信息 -->

<c:forEach var="product" items="${requestScope.products}" varStatus="status">

<!-- 如果是偶数行,为该行换背景颜色 -->

    <tr <c:if test="${status.index % 2 == 1 }">style="background-color:rgb(219,241,212);"</c:if>>

        <td>${product.name }</td>

        <td>${product.area }</td>

        <td>${product.price }</td>

    </tr>

</c:forEach>

原创粉丝点击