In real-world development, such as a large number of JSP scripts in order to simplify JSP, we need to use standard tag libraries and El expressions, but the tags provided in the new tag library are limited and cannot fully meet the needs of development. such as: pagination. Therefore, you need to learn how to customize your own tag library.
If you want to implement a custom label, you need the following steps:
- Writing label processing classes
Need to inherit or implement related classes or interfaces
- Write a label description file
The file is an XML file and must be placed in the Web-inf directory of the Web site
- Introduce tags into the JSP and use the
Use the TAGLIB directive to introduce a tag library, which is then used.
Custom Label class System
Learn more about the next few classes and interfaces:
---| Jsptag interface
This interface is a typical markup interface. The primary markup class that implements the interface can handle the label. Seralizable
----| Tag interface
The interface mainly describes the common characteristics of the label processing class, but the class that implements the interface cannot handle the label body, which defines the communication protocol between the label processing class and the JSP page. It also provides life-cycle methods such as automatic execution at the beginning and end of a tag.
------| TagSupport class
is primarily responsible for handling the properties of the label.
-------| Bodytagsupport class
The main type of the class is the label body that handles the label.
Experience
1. Processing classes
Public classHellohanler implements Tag {PrivatePageContext PageContext =NULL; //execution at the end of the label Public intDoendtag () throws Jspexception {return 0; } //Execute when the label starts Public intdoStartTag () throws Jspexception {//output A Hello message to the pageJspWriter out=pagecontext.getout (); //Output InformationString info ="Hello custom Tag"; Try { out. Write (info); } Catch(IOException e) {e.printstacktrace (); } return 0; } //get its parent tag PublicTag getParent () {return NULL; } //Release Public voidrelease () {}//setting the JSP context object Public voidsetpagecontext (PageContext pc) { This. PageContext =pc; } //Set Parent Tag Public voidsetParent (Tag t) {}}
2. Description file
<?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/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"version="2.1"> <!--2. Write a tag library profile-<tlib-version>1.0</tlib-version> < Short-name>jnb</ Short-name> <tag> <name>hello</name> <tag-class>cn.itcast.test.hellohanler</tag-class> <body-content>empty</body-content> </tag></taglib>
3. Introduction
<% @taglib uri="/web-inf/test.tld" prefix="jnb"%> <br/><jnb:hello/>
JSP1.2 for Custom Label development
Customize the label for a realistic date.
1. Implement a label processing class that can handle label properties
Public classShowdate extends TagSupport {//to make it easier to get properties, you can define and provide a get and set method directly in the processing class with the same name as the property variable PrivateString pattern; PublicString Getpattern () {returnpattern; } Public voidSetpattern (String pattern) { This. Pattern =pattern; } //Automatic execution when the label starts Public intdoStartTag () throws Jspexception {//Create Date ObjectDate Date =NewDate (); //creating a formatted objectSimpleDateFormat format =NewSimpleDateFormat (Getpattern ()); //FormattingString str =Format.format (date); //Get JSP Context objectPageContext PageContext = This. PageContext; //gets the out stream of the JSPJspWriter out=pagecontext.getout (); //Output Try { out. Write (str); } Catch(IOException e) {e.printstacktrace (); } returnSuper.dostarttag (); }}
2. Description file
<taglib? Tag library description file root element 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"version="2.1"> <!--2. Write a tag library profile-<tlib-version>1.0</tlib-version>? Specify the version of the tag library (required)< Short-name>jnb</ Short-name>? Specify the abbreviation for the tag library (required)<tag>? Specify a label to start with<name>showdate</name>? label name<tag-class>cn.itcast.custom.showdate</tag-class>? Specify label handling classes<body-content>empty</body-content>? Specify the tag body, JSP (with) empty (NO)<attribute>? Description Property<name>pattern</name>? Property name<required>true</required>? Description information for a property<rtexprvalue>true</rtexprvalue>? Description information for the property value</attribute> </tag></taglib>
3. Introduction and use
<% @taglib uri="/web-inf/date.tld" prefix="date"%> <date:showdate pattern="yyyy mm month DD Day a E"/>
Implement custom labels with label bodies
1. Label Processing class
Public classShowdatebybody extends Bodytagsupport {//to make it easier to get properties, you can define and provide a get and set method directly in the processing class with the same name as the property variable PrivateString pattern; PublicString Getpattern () {returnpattern; } Public voidSetpattern (String pattern) { This. Pattern =pattern; } //Automatic execution when the label starts Public intdoStartTag () throws Jspexception {//Create Date ObjectDate Date =NewDate (); //creating a formatted objectSimpleDateFormat format =NewSimpleDateFormat (Getpattern ()); //FormattingString str =Format.format (date); //Get JSP Context objectPageContext PageContext = This. PageContext; //gets the out stream of the JSPJspWriter out=pagecontext.getout (); //get tags to mentionBodycontent BODY = This. Getbodycontent (); String Tag_body=body.getstring (); STR="<font color= ' Red ' >"+tag_body+"</font>"+str; //Output Try { out. Write (str); } Catch(IOException e) {e.printstacktrace (); } returnSuper.dostarttag (); }}
2. Description file
<tag> <name>showdate2</name> <tag-class> cn.itcast.custom.showdatebybody</tag-class> <body-content>JSP</body-content> <attribute> <name>pattern</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag>
3. Introduction and use
<date:showdate2 pattern= "YYYY-MM-DD" > System time:</date:showdate2>
Java Learning Notes-Custom Tags 1 (39)