EL和JSTL快速入门

来源:互联网 发布:三菱fx3gaplc编程软件 编辑:程序博客网 时间:2024/05/16 19:52

 EL:Expression Language

作用:快速输出JavaBean的值  ,也可用于关系运算(参考下面el_demo.jsp)

格式:${标识符}

原理:通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符             所对应的对象,则返回结果为””(注意,不是null)。

<%@ isELIgnored="false" %>来控制EL表达式是否起作用

简单例子:

<html>  <head>     <title>el_demo</title>  </head>  <body>   <%--JSP脚本片段 --%>   <%   Address address=new Address();   address.setLocation("洛阳");   address.setZipcode("471800");   Student stu=new Student();   stu.setName("笑笑");   stu.setAge(25);   stu.setSalary(4000);   stu.setAddress(address);   session.setAttribute("S", stu);      %>     用户名:${S.name};<br>     年   龄:${S.age};<br>     薪   水:${S.salary};<br>     地   址:${S.address.location};<br>     邮   编:${S.address.zipcode};<br>    10>5->${10>5}<br>10==5->${10==5}<br>10<5->${10<5}<br>  </body></html>
运行结果:


需要用到的JavaBean:

public class Student {private String name;private int age;private double salary;private Address address;public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}public Student(){System.out.println("web容器通过反射创建JavaBean对象");}public String getName() {System.out.println("getName()");return name;}public void setName(String name) {this.name = name;System.out.println(name);}public int getAge() {System.out.println("getAge()");return age;}public void setAge(int age) {this.age = age;System.out.println(age);}public double getSalary() {System.out.println("getSalary()");return salary;}public void setSalary(double salary) {this.salary = salary;System.out.println(salary);}}

public class Address {private String location;private String zipcode;public Address(){}public String getLocation() {return location;}public void setLocation(String location) {this.location = location;}public String getZipcode() {return zipcode;}public void setZipcode(String zipcode) {this.zipcode = zipcode;}}
JSTL:JavaStandardTaglibLanguage,快速输出动态内容,以代替JSP页面中的脚本<%%>代码,使用JSTL可以在页面中实现一些简单的逻辑,从而替换页面中的脚本代码。

在页面中使用JSTL标签需完成以下2个步骤:
1、导入jstl.jar和standerd.jar这两个JSTL的jar文件(放入Web应用中的WEB-INF的lib文件中,在MyEclipse中环境中,可以在创建Web工程时选择Add JSTL libraries to WEB-INF/lib folder选项,这样即可自动将所需jar文件放入lib库目录)。
2、在JSP页面中使用<%@ tablib url=“”  prifix=“” %>元素导入标签库。

注意
是否已将集合或变量绑定到域对象中,并确保该域对象没有销毁,因为EL只有从域对象中检索对应的值
        JSTL都会和EL绑定在一起用

代码案例:

<html>  <head>    <title>jstl_demo</title>  </head>  <body>  <%  List<String> stringlist=new ArrayList<String>();  stringlist.add("01");  stringlist.add("02");  stringlist.add("03");  stringlist.add("04");  request.setAttribute("SL", stringlist);   %>   <table border="0" align="center">   <tr>   <th>ID</th>   <th>操作</th>   </tr>   <%--取出域对象内容赋给var --%>   <c:forEach var="s" items="${SL}">   <tr>   <td>${s}</td>   <td>购买</td>   </tr>   </c:forEach>   </table>  </body></html>
注意页面元素的声明:

<%@ page isELIgnored="false" %>
<%--prefix设置以c开头的标签 --%>

例如要导入核心库:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

重点:循环控制标签:<c:forEach>用于循环控制:

                                  <c:forEach>属性

                    属性              描述                  是否必须      缺省值

                   items   要进行循环的项目             否              无

                   var       代表当前元素的变量名      否              无

对刚才的代码进行修改,用双列集合Map接口来实现:

<html>  <head>    <title>jstl_demo</title>  </head>  <body>  <%-- <%  List<String> stringlist=new ArrayList<String>();  stringlist.add("01");  stringlist.add("02");  stringlist.add("03");  stringlist.add("04");  request.setAttribute("SL", stringlist);   %> --%>   <%   Map<Integer,String> map=new LinkedHashMap<Integer,String>();   map.put(1, "java");   map.put(1, "xml");   map.put(1, "servlet");   map.put(1, "jsp");   pageContext.setAttribute("MAP", map);    %>      <table border="0" align="center">   <tr>   <th>编号</th>   <th>书名</th>   <th>操作</th>   </tr>   <%--取出域对象内容赋给var --%>   <%-- <c:forEach var="s" items="${SL}"> --%>   <c:forEach var="entry" items="${MAP}">   <tr>   <td>${entry.key}</td>   <td>${entry.value}</td>   <td>购买</td>   </tr>   </c:forEach>   </table>  </body></html>
运行结果:


0 0
原创粉丝点击