最近做一些jsp页面的数据显示,知道jstl标签中有好多运算符,但是根据经验写的话,难免出错,然后再去找具体的符号感觉挺麻烦,就顺带找了点资料整理了下,方便以后学习
运算符
算术运算:+、-、*、/或div、%或mod;
关系运算:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge;
逻辑运算:&&或and、||或or、!或not;
特殊运算:empty(是否为null或空字符串)、?:(三元运算符);
这张图基本上包含了所有的运算符,但好像还少了一个 ${ not empty null }
下面是一些el相关的东西,也可以根据自己的需要写一些自定义的标签库
JSTL标签EL表达式学习
导入标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
JSTL Core 标签库
Core 标签库,又被称为核心标签库,该标签库的工作是对于 JSP 页面一般处理的封装。在该标签库中的标签一共有 14 个,被分为了四类,分别 :
多用途核心标签:<c:out> 、<c:set> 、<c:remove> 、<c:catch> 。
条件控制标签:<c:if> 、<c:choose> 、<c:when> 、<c:otherwise> 。
循环控制标签:<c:forEach> 、<c:forTokens> 。
URL 相关标签:<c:import> 、<c:url> 、<c:redirect> 、<c:param> 。
自定义标签开发整理
从jsp1.1开始就可以在jsp页面中使用自定义标签了,使用自定义标签不但可以实现代码重用,而且可以使jsp代码更简洁。Jsp2.0的标签扩展API中又增加了SimpleTag接口和其实现类SimpleTagSupport。
标签扩展API层次结构:
TLD文件元素详解:
每个自定义标签都必须在TLD文件中声明,TLD文件只不过是一个XML文件。根元素是<taglib>,它包含一个或者多个<tag>标签,该元素用来声明定制标签。<taglib>元素中只有<tlib-version>元素是必须的,其他都是可选的。
TLD文件中的元素
标 签 | 含 义 |
<taglib> | TLD文件的根元素 |
<tlib-version> | 此标签库的版本 |
<jsp-version> | 此标签库依赖的JSP版本。 |
<short-name>
<description> <display-name> <icon> <uri> <validator> <listener> <function> | 当在JSP中使用标签时,此标签库首选或者建议的前缀。当然可以完全忽略这个建议 描述信息 图形工具可显示的一个简短名称 图形工具可显示的图标 指定使用该标签库中标签的URI 关于该库的TagLibraryValidator信息 指定事件监听器类 定义一个在EL中使用的函数 |
<tag> | 定义一个标签 |
<tag>元素的子元素
标 签 | 含 义 |
<description> <display-name> <icon> <name> | 指定针对标签的信息 开发工具用于显示的一个简短名称 可被开发工具使用的图标 标签名称 |
<tag-class>
<tei-class> | Java标签处理器类的名称。注意这是处理器类的全限定名称,比如com.xx.tag.TableTag Javax.servlet.jsp.tagext.TagExtraInfo类的一个可选子类 |
<body-content>
<variable> <example> | 此标签的主体部分的内容。其值可为scriptless\tagdependent\empty,默认为empty 定义脚本变量信息 使用该标签例子的可选的非正式描述 |
<attribute> | 包含了此标签的一个属性的元数据 |
<attribute>的子元素
标 签 | 含 义 |
<description> <name> | 有关描述的文本信息 在jsp标签中使用的属性名称 |
<required>
<rtexprvalue>
<type> | 指定属性是必须的还是可选的,默认为false,表示属性可选。如果该值为true,则jsp页面必须为该属性提供一个值。可能的值true、false、yes、no 指定属性是否能接受请求时表达式的值,默认为false,表示不能接受请求时表达式的值。可能值:true、false、yes、no 属性的数据类型,该元素只能用在当<rtexprvalue>设置为true时。它指定当使用请求时属性表达式(<%= %>)返回类型。默认string |
实例(继承SimpleTagSupport类方式):
编写一个DateTag标签,输出系统时间。<c1:date/>,输出的格式:2011年11月9日
step1:
写一个java类,继承SimpleTagSupport类
step2:
override doTag()方法,在该方法里,实现相应的处理逻辑
package mytag;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class DateTag extends SimpleTagSupport{
@Override
public void doTag() throws JspException, IOException {
PageContext ctx = (PageContext)getJspContext();
JspWriter out = ctx.getOut();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
out.println(sdf.format(new Date()));
}
}
step3:
在.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.1</tlib-version>
<short-name>c1</short-name>
<uri>http://www.tarena.com.cn/mytag1</uri>
<tag>
<name>date</name>
<tag-class>mytag.DateTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
step4:
使用taglib导入标签(jsp中)
<%@taglib prefix="c1" uri="http://www.tarena.com.cn/mytag1" %>
<c1:date/>