zoukankan      html  css  js  c++  java
  • jsp标签jstl和el表达式

    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"/>


  • 相关阅读:
    sublime text 3安装 package control 插件的方法
    mysql 库和表占用空间查询
    错误:编码GBK的不可映射字符
    新系统设置 github 私钥
    git 之忽略文件 gitignore 创建和使用规则
    DesiredCapabilities内容详解(摘)
    appium-python自动化之get_attribute笔记(摘)
    excel批量插入图片-方法(宏和纯手工操作)
    利用Python将多个excel文件合并为一个文件
    notePad++ 运行python
  • 原文地址:https://www.cnblogs.com/alexhjl/p/6801423.html
Copyright © 2011-2022 走看看