自定义标签:JSTL

自定义标签:

我们可以自己去定义一些jsp标签。自定义包含两个:java类,tld文件(标签的描述文件)

 

标签库JSTL(JSP Standard Tag Library):

       因为在jsp中使用java代码去控制页面的显示(即:用小段的<%%>),可读性很差,这样后期维护会比较麻烦,所以引入了Java标签库。

 

n       常用的JSTL标签库:

n       核心标签库:http://java.sun.com/jsp/jstl/core包含 Web 应用的常见工作,比如:循环、表达式赋值、基本输入输出等。

n       格式化标签库:http://java.sun.com/jsp/jstl/fmt用来格式化显示数据的工作,比如:对不同区域的日期格式化等。

n        XML 标签库:http://java.sun.com/jsp/jstl/xml用来访问 XML 文件的工作,这是 JSTL 标签库的一个特点。

n        函数标签库http://java.sun.com/jsp/jstl/functions 用来读取已经定义的某个函数。

n       数据库标签库:http://java.sun.com/jsp/jstl/sql可以做访问数据库的工作。

 

 

J2EE 1.4:

       使用Java标签库首先要在项目中引入jstl.jar和standard.jar两个jar包,MyEclipse中有这个功能;

Standard.jar中有tld文件(是一个xml文档),这是关于JSTL标签的说明文件,对应的java类就是加载这些说明,然后对我们写的JSTL标签进行解析处理。

JAVAEE 5.0:

      javaee5.0类库已经自带了jstl相关的jar包。不需要再添加,可以直接使用jstl。

 

其次要在页面中加入这样一个标签头[gjw1]  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 

<c:out>标签用于显示变量数据。

    <c:out value="${a}" default="空"[c2]  escapeXml="true" [c3]  ></c:out>

 

<c:set>标签的常用属性(将值存储到作用域或为 JavaBean 中的变量属性赋值 ):

n       <c:set  var=“name“  value=“zhangsan“  scope=“page”/>   (相当于:pageContext.setAttribute(“name”,”zhangsan”))

n        将值zhangsan存储到变量name, name为作用域pageContext中的一个属性。

n       <c:set var=“t” ><b>hello c:set!</b></c:set>

n         将本体内容存储到变量t中。

n        <c:set target="${u}" property="pwd" value="123" ></c:set>

n       设置已有的EL变量u的属性pwd的值为123

n       <c:set target="${u}" property="pwd"[c4]  >123456</c:set>

n       将本体内容设为EL变量u的属性pwd的值。

[c5] 

 

<c:remove var="sampleValue" scope="session"/> 相当于:session.removeAttribute(“sampleValue”)

 

 

c:if标签à相当于java中的if语句

名称

描述

类型

默认值

test

若返回true,则执行本体内容;否则,不执行。

Boolean

无。

var[c6] 

用来存储test执行后的结果

String

Scope

var 指定变量的存储范围

String

page

    <c:if test="${empty requestScope.s[gjw7] }" var=”resultTest” >

           <h1>true才显示</h1>

</c:if>

执行结果:${ resultTest }

 

c:choose标签à相当于java中的if-else语句

       <c:choose>[gjw8] 

              <c:when[gjw9]  test="${empty requestScope.s}">

                     <h1>空</h1>

              </c:when>

              <c:otherwise[gjw10] >

                     <h1>不空!</h1>

              </c:otherwise>

       </c:choose>

使用要点:

1.       <c:when>必须在<c:otherwise>之前

2.       <c:choose>中除了<c:when>/<c:otherwise>不能有其他元素。

 

c:forEach标签à相当于java中的遍历操作.

常用参数及其含义:

varStatus属性的使用

       <%

              List list = new ArrayList();

              for(int i=0;i<20;i++){

                     list.add("A:"+i);

              }

              pageContext.setAttribute("li",list);

        %>

        <c:forEach items="${li}"[gjw11]   var="a"[gjw12]  begin="5" end="13" step="3"[gjw13]   varStatus="idx"[gjw14]  >

               <b>${a}</b>

               <c:if test="${(idx.index+1)%5= =0}">

                   <br>

               </c:if>

[gjw15]        </c:forEach>

 

<c:import url="http://www.baidu.com"></c:import>类似于 include。但是比include范围广。Include只能加载本web应用的路径。Import可以加载本web应用以外的路径。下面是几种典型的使用:

1.引入本web应用中的资源:

    <c:import url="/1.jsp"  ></c:import>   此处/代表本web应用根目录

2. 引入外部URL:

    <c:import url="http://www.baidu.com"  ></c:import> 

3. 将所引入文件的内容作为字符串存储在变量中,留待以后使用。

    <c:import url="1.jsp" var="t5" scope="page"></c:import>

    ${t5}

请求重定向:<% response.sendRedirect(“fortoken.jsp”) %>

<c:redirect url="fortoken.jsp">地址栏改变

             <c:param name="a" value="33"></c:param>

             <c:param name="b" value="44"></c:param>

      </c:redirect>

${param.a}

            <%

                     String str = "Where you from?I am from China";

                     request.setAttribute("str",str);

              %> 

              <c:forTokens items="${str}" delims="?| " var="str1">

                     <b>${str1}</b><br>

              </c:forTokens>

 

 

Fn标签库的使用:[gjw16] 

简介

在jsp页面上经常遇到得到集合长度、字符长度、字符切取等应用需,在2.0以前这种需是许多程序员对JSTL及为不满意的地方之一。为此在2.0 中添加了functions标签,其提供对以上需求的支持。

使用方法

引用

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

 

函数说明:

 

函数

描述

fn:contains(string, substring)

如果参数string中包含参数substring,返回true

fn:containsIgnoreCase(string, substring)

如果参数string中包含参数substring(忽略大小写),返回true

fn:endsWith(string, suffix)

如果参数 string 以参数suffix结尾,返回true

fn:escapeXml(string)

将有特殊意义的XML (和HTML)转换为对应的XML character entity code,并返回

fn:indexOf(string, substring)

返回参数substring在参数string中第一次出现的位置

fn:join(array, separator)

将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。

fn:length(item)

返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。

fn:replace(string, before, after)

返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果

fn:split(string, separator)

返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素

fn:startsWith(string, prefix)

如果参数string以参数prefix开头,返回true

fn:substring(string, begin, end)

返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符

fn:substringAfter(string, substring)

返回参数substring在参数string中后面的那一部分字符串

fn:substringBefore(string, substring)

返回参数substring在参数string中前面的那一部分字符串

fn:toLowerCase(string)

将参数string所有的字符变为小写,并将其返回

fn:toUpperCase(string)

将参数string所有的字符变为大写,并将其返回

fn:trim(string)

去除参数string 首尾的空格,并将其返回

 

示例:

       <c:forEach items="${li}"   var="str" begin="0" end="9" step="1" varStatus="ind">

            <b>${fn:substring(str,1,fn:length(str))}</b>

           <c:if test="${(ind.index+1)%3==0}">

              <br>

           </c:if>

       </c:forEach>

 

    <c:forEach items='${fn:split("a,b,c",",")}'[gjw17]  var="cc" >

       ${cc}  <br>

    </c:forEach>

 

 

扩展知识点:

JSTL的格式化标签库。(自学!!)

 

 


 [gjw1]如果在浏览器中看页面的源码时,标签语句原样发了过去,就是因为没加标签头

 [c2]当显示变量为null或不存在时,显示”空”

 [c3]True:则将文本按照普通文件显示。

False:如果文本中存在HTML数据,则进行解析。

 [c4]Target=”${u.password}”,此处这么些错误。

用target指定javabean

用property指定属性名。

 [c5]基本用不着!不用看了!

 [c6]可以通过他保存该<c:if>执行结果,留待日后做其他处理。

 [gjw7]相当于判断表达式,返回true或false

 [gjw8]注意 c:choose标签中除了when和otherwise不能加其他的语句

 [gjw9]相当于if-else中的if,可以写多个

 [gjw10]相当于if-else中的else

 [gjw11]遍历哪个对象

 [gjw12]暂存变量

 [gjw13]起始位置、结束位置、步长(默认为1),都是可选的属性

 [gjw14]为了取得下标的属性

 [gjw15]常用的换行分页操作

 [gjw16]JSTL1.1及以上中使用。

 [gjw17]返回一个数组。由于里面有双引号,外面可用单引号。

JSTL中的属性可用双引号、单引号。不过,不写引号不行。

原文地址:https://www.cnblogs.com/elikew/p/3409392.html