• java学习笔记—EL表达式(38)


    EL表达式

    EL即Expression Language,主要的任务是帮助开发者简化获取域属性。

    但是一般情况下需要使用EL和JSTL结合使用。

    语法:

    ${

        // 隐含对象|直接写域中的属性

    }   

        算术运算
    <!-- 算术运算 -->
          20+10 = ${ 20+10 } <br/>       
          20-10 = ${ 20-10 } <br/>       
          20*10 = ${ 20*10 } <br/>       
          20/10 = ${ 20/10 } <br/>       
          20%10 = ${ 20%10 } <br/>       
        比较运算
      <!-- 比较运算 --> 
          20 > 10 = ${ 20 > 10 } <br/>      
          20 < 10 = ${ 20 < 10 } <br/>      
          20 >= 10 = ${ 20 >= 10 } <br/>      
          10 == 10 = ${ 10 == 10 } <br/>
          ${ str == null }
        三目运算符
    ${ name != null ? "欢迎":"注册"}
        逻辑运算
    ${ 12>10 && 1<2 }<br/>  

    一  获取域对象(重点)

    1. 普通数据

    <!-- 获取普通属性 --> 
          <% 
            request.setAttribute("name","jack");
          %>
          ${name}<br/>

    以上的代码在获取域属性的时候没有指定给任何的域空间,那么底层一定按照小到大的方式逐一的检测的域属性。

    pageContext.findAttribute(“”);          à 实现原理

    2 获取数组属性

    <!-- 获取数组属性 -->
          <% 
            int [] ins = {1,2,3,4};
            request.setAttribute("arrs",ins);
          %>
          ${arrs}<br/>
          ${arrs[2]}<br/>
          ${arrs["2"]}<br/>   该方式不是给数组用,是个集合使用。

    3  List集合

       <!-- 获取数组属性 -->
          <% 
            List<String> list = new ArrayList<String>();
            list.add(0,"jiao");
            list.add(1,"ning");
            list.add(2,"bo");
            request.setAttribute("list",list);
          %>
          ${list }<br/>
          ${list[0] }<br/>
          ${list["0"] }<br/>

    4  获取Map属性

    <% 
            LinkedHashMap<String,String> map =  new LinkedHashMap<String,String>();
            map.put("001","ooooo");
            map.put("002","fffff");
            map.put("003","uuuuu");
            request.setAttribute("map",map);
          %>
          ${map }<br/>
          ${map[001] }<br/>
          ${map["001"] }<br/>
          <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
          <c:forEach items="${map}" var="entry">
              ${entry.key } = ${entry.value }<br/>
          </c:forEach>

    6  Bean操作

    <!-- 获取Map中Bean属性 -->
          <% 
            LinkedHashMap<String,Cat> cats =  new LinkedHashMap<String,Cat>();
            cats.put("001",new Cat("A猫",3,"波斯猫"));
            cats.put("002",new Cat("B猫",3,"狸猫"));
            cats.put("003",new Cat("C猫",3,"加菲猫"));
           
            request.setAttribute("cats",cats);
          %>
          <c:forEach items="${cats}" var="entry">
              ${entry.key}  = ${entry.value.name } , ${entry.value.age },${entry.value.type }<br/>  
          </c:forEach>

    7  EL隐含对象

    pageScope

    requestScope

    sessionScope

    applicationScope

    如果在获取域属性的时候没有指定具体的域,那么逐一的查找比较耗时,因此希望大家在明确域名的时候一定要指定域名。

    pageContext   该对象可以获取request对象

    举例:

    <!-- 隐含对象 -->
          ${pageContext.request.method }<br/>
          ${pageContext.request.servletPath }<br/>
          ${pageContext.request.contextPath }<br/>
          ${pageContext.request.protocol }<br/>

    获取请求参数 param paramValues
    举例: ${param.name }
    <br/> ${paramValues.likes[0] }<br/>

    获取请求头信息 header headerValues
    举例: ${header[
    "accept"] }<br/> initParam
    获取Cookie cookie
    举例: ${cookie }
    <br/> ${cookie.address }<br/> ${cookie.address.name }<br/> ${cookie.address.value }<br/>

    EL和函数库

    问题:在数据显示的时候经常需要调用一些方法对需要显示的数据进行基本的处理,如:

    数据过滤、求子串等操作。那么就需要使用EL表达式进行快速的函数调用。

    1. 引入HTMLFilter.java类
    2. 描述为函数

    2.1 在WEB-INF中创建一个myfun.tld文件

    <?xml version="1.0" encoding="UTF-8"?>
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
      version="2.0">
      <tlib-version>1.0</tlib-version>
      <short-name>jnb</short-name>
      <function>
        <name>filter</name>
        <function-class>cn.itcast.utils.HTMLFilter</function-class>
        <function-signature>java.lang.String filter(java.lang.String)</function-signature>
      </function>
    </taglib>  

    2.2  引入函数库

    %@taglib uri="/WEB-INF/myfuns.tld" prefix="jnb"%

    1.2  使用EL调用函数

    <td>${jnb:filter(entry.value.info)}</td>

    注意:

    1. EL表达式中不能继续嵌套EL表达式
    2. 定义函数的时候函数必须是静态的。

    总结

    JSTL总过有5个库,但是由于JSP主要是做数据显示的,因此我们只学习核心库和函数库。

  • 相关阅读:
    RHEL 6.5 安装Docker
    sar命令
    Linux 安装部署 Redis
    hugepage设置
    pycharm使用
    oracle如何保证数据一致性和避免脏读
    转:数据库实例自动crash并报ORA-27157、ORA-27300等错误
    oracle安装内核参数设置
    外部表
    LNMP环境搭建
  • 原文地址:https://www.cnblogs.com/zhenghongxin/p/4435825.html
Copyright © 2020-2023  润新知