码迷,mamicode.com
首页 > Web开发 > 详细

2015-09-23 JSTL标签(二)

时间:2015-09-23 23:07:16      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

2015-09-23  JSTL标签(二)
一:Fmt标签:formatDate
在jsp页面中使用fmt标签:<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
1>fmt标签库用来式化输出的
格式化日期的标签是:
<fmt:formatDate value="xxx" pattern="xxx"/>
其中value指定一个Date类型的变量;pattern用来指定输出的日期模板,例如:yyyy-MM-dd HH:mm:ss
<%
Date date = new Date();
request.setAttribute("date",date);
%>
<p>正常输出当前时间的格式:</p>
${date}
<p>使用fmt格式化后的时间格式输出:</p>
<fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"/>
正常输出当前时间的格式:
Wed Sep 23 21:09:37 CST 2015
使用fmt格式化后的时间格式输出:
2015-09-23 21:09:37
fmt标签库还提供了格式化数字的标签,如下:
<fmt:formatNumber value=”xxx” pattern=”xxx”/>
标签中
value:指定数字类型的变量或常量;
pattern:指定格式化数字的类型,还四舍五入
   
例如:0.00,#.## 使用0和#是有区别的
<p>使用fmt格式化输出数字:</p>
<fmt:formatNumber value="3.1415926" pattern="0.00"/>
使用fmt格式化输出数字:
3.14
二:自定义标签
传统标签实现tag接口
简单标签实现SimpleTag接口
自定义标签用于封装java代码
自定义标签是动作标签,每一个标签就是一个对象
自定义标签的功能在对应类的方法中实现
创建自定义标签的步骤:
1:定义一个标签处理类

2:创建一个tld文件,该文件本身是一个xml文件

3:在页面中使用<%@ taglib%>指令来指定tld文件的位置。
传统标签类tag接口:
Tag是经典标记处理程序的接口,定义了标记处理程序与 JSP 页面实现类之间的基本协议,也定义了生命周期以及在开始
和结束标记时调用的方法。但是相对于其他标签处理接口来说比较复杂。
简单标签类SimpleTag接口:
因此我们定义的标签处理类不会去实现Tag接口,而是去实现SimpleTag接口,该接口的父接口是JspTag,它和Tag

是兄弟关系

 实际中创建自定义标签时,我们extends SimpleTagSupport

SimpleTag接口的常用方法:
void doTag():每次执行标签时都会调用这个方法;
JspTag getParent():返回当前标签的父标签(很少使用);
void setParent(JspTag parent):设置父标签;
void setJspBody(JspFragment jspBody):
设置标签体;
void setJspContext(JspContext pc):设置jsp上下文对象,其中JspContext类的子类是PageContext(获得
内置对象和作用域)
setParent(JspTag parent)、setJspBody(JspFragment jspBody)、setJspContext(JspContext pc)方法是由

Tomcat服务器调用以上三个方法执行后,doTag()方法才会被Tomcat服务器调用。

创建tld文件
在WEB-INF目录下:不能建立在lib和class子目录下,建立一个子目录tld保存
JSP要求2.0以上版本
默认建立好后修改Schema路径--复制http://java.sun.com/xml/ns/j2ee到后面的文件路径上前加”/”
empty:表示标签中没有标签体;
JSP:jsp2.0已经不在支持这个类型了,它表示标签体内容可以是:java脚本,标签,也可以是el表达式;
scriptless:表示标签体内容可以是EL表达式也可以是其他标签,包括动态标签和HTML标签;
tagdependent:表示标签体内容不会被执行,而是直接赋值给标签处理类。
1.标签处理类:
package com.cissst.simpleTag;
import java.io.IOException;
import java.io.Writer;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class MyTag extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
Writer writer = this.getJspContext().getOut();
writer.write("<br/>执行标签体之前...<br/>");
this.getJspBody().invoke(writer);
writer.write("<br/>执行标签体之后...<br/>");
}
}
2.tld文件:
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" 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">
 <tlib-version>1.0</tlib-version>
 <short-name>MyTag</short-name>
 <uri>http://www.mariahcat.com/MyTag</uri>
 
 <tag>
 <name>MyTag</name>
 <tag-class>com.cissst.simpleTag.MyTag</tag-class>
 <body-content>scriptless</body-content>
 </tag>
</taglib>
3.JSP文件:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://www.mariahcat.com/MyTag" prefix="aoao" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP ‘SimpleTag.jsp‘ starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  
  <body>
    <p>使用自定义标签:</p>
    <%
    request.setAttribute("name", "dodo");
     %>
    <aoao:MyTag>${requestScope.name}</aoao:MyTag>
  </body>
</html>
使用自定义标签:
执行标签体之前...
dodo
执行标签体之后...
可以自定义一个带有属性的标签,具体步骤如下:
1.首先在标签处理类中添加属性
package com.cissst.simpleTag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class MyTag2 extends SimpleTagSupport {
private int counts;
public void setCounts(int counts) {
this.counts = counts;
}
@Override
public void doTag() throws JspException, IOException {
for (int i = 0; i < counts; i++) {
getJspBody().invoke(null);
}
}
}
2.然后在tld文件中添加对属性的配置
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-
jsptaglibrary_2_1.xsd">
 <tlib-version>1.0</tlib-version>
 <short-name>MyTag2</short-name>
 <uri>http://www.mariahcat.com/MyTag2</uri>
 
 <tag>
 <name>MyTag2</name>
 <tag-class>com.cissst.simpleTag.MyTag2</tag-class>
 <body-content>scriptless</body-content>
 
 <attribute>
 <name>counts</name>
 <required>true</required>
 <rtexprvalue>true</rtexprvalue>
 </attribute>
 </tag>
</taglib>
3.JSP文件
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://www.mariahcat.com/MyTag2" prefix="aoao" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP ‘SimpleTag.jsp‘ starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  
  <body>
    <p>使用带属性的自定义标签:</p>
    <%
    request.setAttribute("name", "dodo");
     %>
    <aoao:MyTag2 counts="10">${requestScope.name}<br/></aoao:MyTag2>
  </body>
</html>
使用带属性的自定义标签:
dodo
dodo
dodo
dodo
dodo
dodo
dodo
dodo
dodo
dodo
doTag()抛出SkipPageException
自定义标签可以控制页面中当前自定义标签后的内容是否执行
 

该异常是跳过页面异常,当服务器调用doTag()方法时,捕获了SkipPageException异常,那么页面中的以下内容就

不再执行

2015-09-23 JSTL标签(二)

标签:

原文地址:http://www.cnblogs.com/mariahcat/p/4833714.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!