1.el表达式的使用

  1)访问bean的属性

    方式一:

      ${user.name},容器会依次从pageContext,request,session,application中查找(getAttribute)绑定名称为user的对象,并调用该对象的getName方法,最后输出。

      并且比较友好,找不到对象会将null转换成""空字符串输出。但是一定要有get方法,如果找不到get方法,还是会error500错误。

      指定查找范围:pageScope,requestScope,sessionScope,application来指定,例如${sessionScope.user.name},就算session找不到,其他地方也不找了

    方式二:

      ${user["name"]}

      ${user.interest[0]},可以访问数组下标,要有get方法。

  2)进行一些简单的运算,运算的结果可以给jsp标签的属性赋值,也可以直接输出。

    a.算术运算 +- */ %

      ${1+1}直接输出2,没有字符串拼接 .${"2"+"4"}输出6

    b.关系运算 > < = == >= !=

      ${2>1}直接输出true

    c.逻辑运算 && || !

      ${1<2 && 2>3} false

    d.empty运算

      用来判断集合是否为空,或者是否是一个空字符串

      <%

        List list1=new ArrayList();

        request.setAttribute("list",list1);

        request.setAttribute("str2","");

        ${empty list} //输出true

        ${empty str2}//输出true

        ${empty null}//输出true

        ${empty aaa}//输出true,容器找不到aaa这个绑定名也会true

      %>

  3)读取请求参数值 e3.jsp?username=Sally

      a.${param.username}等价于request.getParameter("username");

      b.${paramValues.city}等价于request.getParamterValues("city");


jstl标签

将jstl相关的jar文件拷贝到WEB-INF/lib下

如果使用javaee5.0,已包含jstl相关的jar文件。一般不需要再拷贝。

使用taglib指令,导入相应的标签。

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

jstl的核心标签:

  1)if

  <c:if test="${user.gender == 'm'}">男</c:if>

  <c:if test="${user.gender != 'm'}">女</c:if>

  <c:if test="${user.gender == 'm'}" var="flag" scope="request">男</c:if>   等价于request.setAttribute("flag",运行结果true/false)   ,scope可以写page,session,application

  <c:if test="${!flag}">女</c:if>  通过上面一行的flag结果来判断

  2)choose  相当于if{} elseif{} else{}

    when可以出现1次或者多次。当test属性为true时,会执行该分支。

    otherwise可以出现0次或者1次。表示例外。

  <c:choose>

    <c:when test="${user.gender == 'm'}">男

    </c:when>

    <c:when test="${user.gender == 'f'}">女

    </c:when>

    <c:otherwise>保密

    </c:otherwise>

  </c:choose>  

  3)forEach标签,用来遍历集合或者数组。每次从集合或者数组中取一个元素,然后将其绑定到pageContext上,绑定名由var属性来指定。

    items属性用来指定要遍历的集合活着数组,可以使用el表达式。

    var属性用来指定绑定名,绑定范围固定是pageContext.

    varStatus属性:用来制定一个绑定名,绑定范围固定是pageContex。绑定值是一个特殊的对象,该对象提供了一些方法,用来获得当前遍历的状态。getIndex():获得当前被遍历的元素的下标(从0开始)。getCount():获得当前是第几次遍历(从1开始)

  <c:forEach items="" var="" varStatus="">

  </c:forEach>

  例子:

  <table>

    <tr>

      <td>姓名</td>

      <td>性别</td>

      <td>年龄</td>

      <td>index</td>

      <td>count</td>

    </tr>

    <c:forEach items="${userlist}" var="u" varStatus="s">

      <tr class="row${s.index%2+1}">  //css写个row1 row2的class,表格行颜色互换

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

        <td>${u.gender}</td>

        <td>${u.age}</td>

        <td>${s.index}</td>

        <td>${s.count}</td>

      </tr>     

    </c:forEach>

  </table>

例子:listEmp.jsp

  servlet用转发把emplist传给jsp。删除按钮<a href="del.do?id=${u.userid}" onClick="return confirm('确定删除${u.username}吗?')">删除</a>

  修改按钮<a href="load.do?id=${u.userid}>修改</a>

  


2.自定义标签 简单标签(new) 复杂标签(old)

  step1,写一个java类,继承SimpleTagSupport类。

  step2.orerride doTag方法,在该方法里面编写处理逻辑。

  step3,描述标签(.tld文件)

<%@taglib uri="test" prefix="c1"%>

<c1:hello msg="hello world" qty="100"/>

包名tag,类名HelloTag.

重写doTag()方法.并增加属性,这些属性要有对应的set方法。

  private String msg;

  private int qty;

  public void doTag() throws JspException, IOException {
  PageContext ctx=(PageContext)getJspContext();
JspWriter out = ctx.getOut();
for(int i=0;i<qty;i++){
    out.println(msg+"<br/>");
  }
}

然后新建一个mytag.tld,放到WEB-INF下面和web.xml平级。

把c.tld里面xml根元素和taglib根元素复制过来。

把tlib-version,short-name,url拷过来

并把url改成test,short-name 改成c1

把23到41行tag标签复制过来。name改成hello。tag-class改成tag.HelloTag。

如果把body-content改成empty,那么在jsp里,不能写标签体。如果写成scriptless,表示带有标签体,但不能写任何java代码<c1:hello msg="hello world" qty="100"></c1:hello>。如果写成JSP表示当中可以写java代码,有标签体。

attribute中,<name>写成msg,required如果写true一定要写msg,false可写可不写msg。rtexprvalue表示能否动态赋值,可以通过el表达式计算赋值。

再写个attribute,name写成qty,required写true,rtexprvalue写true例如jsp里qty="${1+7}"

写个日期标签和上面过程差不多

<c1:date pattern="yyyy-MM-dd"/>


jsp标签jstl和el表达式的更多相关文章

  1. 【转】JSP中的JSTL与EL表达式用法及区别

    对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念JSTL一般要配合EL ...

  2. jsp中的JSTL与EL表达式用法及区别

    对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念 JSTL一般要配合E ...

  3. jstl,el表达式

    在上一篇中,我们写了将数据传到jsp页面,在jsp页面进行展示数组,但是我们发现,在jsp页面写代码是一件很烦的事,一个循环要拆成两部分,例如for循环,在例如if语句: <%int a=22; ...

  4. JSTL与EL表达式(为空判断)

    JSTL与EL表达式(为空判断) 一.循环遍历集合  1.在jsp中引入标准函数声明  <%@ taglib uri="http://java.sun.com/jsp/jstl/cor ...

  5. JSP页面无法识别EL表达式

    昨天一直纠结一个问题,JSP页面无法获取${user}的值,一直显示的是${user},今天解决了,原来是JSP页面无法识别EL表达式. 我的web.xml的声明如下: <!DOCTYPE we ...

  6. JSP页面不支持EL表达式的解决方法

    JSP页面不支持EL表达式的问题就出在新建项目时web.xml的声明上. web.xml声明部分一般分为如下版本的xsd: web-app_2_2.xsd web-app_2_3.xsd web-ap ...

  7. jsp页面无法解析EL表达式问题

    Servlet版本的问题.原来Servlet中可以设定是否解析EL表达式,只有2.4版本的Servlet默认是解析EL表达式的,而其他版本是默认不解析EL表达式.于是把web.xml中使用的2.5版本 ...

  8. Java第三阶段学习(十四、JSP动态页面、EL表达式、JSTL标签库)

    一.JSP技术 1.jsp脚本和注释 jap脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部,比如写在doget.dopost 内的代码 2) ...

  9. JSP标签语法、JSTL标签库、EL表达式辨析

    <一.JSP > JSP 语法语法格式: <% 代码片段 %>或者<jsp:scriptlet> 代码片段</jsp:scriptlet> JSP声明 ...

随机推荐

  1. linux-网站收藏

    创建sudo无密码登陆 http://www.aboutyun.com/blog-61-428.html

  2. &lt;climits&gt;头文件定义的符号常量

    <climits>头文件定义的符号常量 CHAR_MIN  char的最小值 SCHAR_MAX  signed char 最大值 SCHAR_MIN   signed char 最小值 ...

  3. 关于bazel使用笔记

    当我们在build一个文件时,需要另外的放置cache时,我们需要: bazel --output_user_root=/path/to/directory build //foo:bar  

  4. C# 操作PDF

    Spire.PDF组件概述 Spire.PDF是一个专业的PDF组件,用于在.NET应用程序中创建,编辑,处理和阅读PDF文档.支持丰富的PDF文档处理操作,如PDF文档合并/拆分.转换(如HTML转 ...

  5. 【iCore4 双核心板_ARM】例程三十七:SDRAM实验——读写SDRAM

    实验现象: 上电即开始读写SDRAM测试,测试过程中,蓝色LED点亮,如果出现错误,红色LED闪烁,测试成功,绿色LED点亮. 核心代码: int main(void) { /* USER CODE ...

  6. Scratch 可能能帮你找到学习编程的初心

    Scratch 是MIT 出品的一款少儿编程软件,基于Adobe Air开发,这个运行环境在如今已经显得有些过时,但只要这个软件有用,软件本身就不会过时. 编程的本质大致是调用计算机的指令编写一系列任 ...

  7. Java编程的逻辑 (88) - 正则表达式 (上)

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  8. 【css】垂直居中的几种写法

    结构 <div class="vam"> <div class="vam-body">垂直居中</div> </div ...

  9. mysql密码的坑

    一段时间没用本机的mysql,忘了root密码,从网上找的修改方法用起来大多都有问题.mysql版本8.0.12. 网上大多数思路:修改msql启动方式为带--skip-grant-tables参数: ...

  10. Netty:option和childOption参数设置说明

    Channel配置参数 (1).通用参数 CONNECT_TIMEOUT_MILLIS :   Netty参数,连接超时毫秒数,默认值30000毫秒即30秒. MAX_MESSAGES_PER_REA ...