疯狂的草儿 发表于 2013-2-6 08:40:45

编写自己的定制标记库(二)

上一篇文章记录了怎么编写定制标记库,如果认真看的,并且动手去实现了的,想必一定会觉的很容易。同时也会有一些疑问,什么疑问呢? 我见JSP中的标记啊,EL的标记啊有的可以设定属性值,但是我们编写的这个没有属性值。别急,在这里我讲记录一下怎么编写可以自己设定属性的标记。
1.学习目标:通过这个实例,了解如何为自己编写的定制标记添加属性。
2. 首先编写标记处理类
 
       /*** 按照设定的日期时间格式,格式化给定的日期后输出,         * 如果没有给定日 期 时间 * 就输出当前的日期时间,如果没有给定日期时间的输出格式 * 按照yyyy-MM-dd hh:mm:ss格式输出 */public class DateTimeTag extends TagSupport {private static final long serialVersionUID = 1L;private String pattern = "yyyy-MM-dd hh:mm:ss";private Date date;public void setDate(Date date){this.date = date;}public void setPattern(String pattern){this.pattern = pattern;}public int doEndTag() throws JspTagException{SimpleDateFormat sdf = new SimpleDateFormat(pattern);if(date == null){date = new Date();}JspWriter out = pageContext.getOut();try {out.println(sdf.format(date));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return EVAL_PAGE;}} DateTimeTag类与上个实例的TimerTag类相比较,只重写了doEndTag()方法。如果标记不包含内容或者不显示标记所包含内容,就可以不用重写doStartTag() 方法。(ps:个人感觉这边可能应用了适配器模式,我没有看源代码,所以也不十分确定)。但是这里新增加了两个setter方法,分别为date和pattern两个实例赋值,这两个变量的值是通过定制标记的属性传递到类中的。
3.编写配置文件
<?xml version="1.0" encoding="UTF-8"?><taglib 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/javaeeweb-jsptablibrary_2_1.xsd"   version ="2.1" >   <tlib-version>1.0</tlib-version>   <short-name>util</short-name>   <uri>http://crazy.com/taglib/util</uri>   <display-name>utilitytags</display-name>   <description>custom web utility tags</description>   <tag>   <name>Timer</name>   <tag-class>practice.TimerTag</tag-class>   <body-content>JSP</body-content>   </tag>          <tag>   <name>dateTime</name>   <tag-class>practice.DateTimeTag</tag-class>   <body-content>empty</body-content>   <attribute>   <name>date</name>   <requried>false</requried>   <rtexprvalue>true</rtexprvalue>   <description>input date</description>   </attribute>   <attribute>   <name>pattern</name>   <requried>false</requried>   <rtexprvalue>false</rtexprvalue>   <description>date time format pattern</description>   </attribute>   </tag></taglib> <body-content> empty<body-content>的值为empty,表示<util:dateTime>标记不包含内容。<required>设定这个属性是否为可选属性,false为可选,true为必选,默认值为false。<rtexprvalue>设定属性值是否接受JSP表达式的计算结果,默认为false。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@taglib prefix="util" uri="http://crazy.com/taglib/util"%><html><head></head><body><util:Timer><%for(int i =0;i<1000000;i++); %></util:Timer><br/>   <util:dateTime/>   <br/> <util:dateTime pattern= "yyyy年MM月HH:mm:ss" /><br/></html> 部署一下。运行即可。
页: [1]
查看完整版本: 编写自己的定制标记库(二)