|
|
上一篇文章记录了怎么编写定制标记库,如果认真看的,并且动手去实现了的,想必一定会觉的很容易。同时也会有一些疑问,什么疑问呢? 我见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> 部署一下。运行即可。 |
|