Let's see a first very simple tag handler.
First step is creating a class that extends SimpleTagSupport and overrides its doTag() method. Here the doTag() would just ouput some text:
package ch10; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class SimpleTagTest extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { getJspContext().getOut().print("What a silly custom tag!"); } }Now we create a TLD in WEB-INF, simple.tld:
<?xml version="1.0" encoding="ISO-8859-1" ?> <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/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.2</tlib-version> <uri>simpleTags</uri> <tag> <description>a first very simple tag handle</description> <name>simple</name> <tag-class>ch10.SimpleTagTest</tag-class> <body-content>empty</body-content> </tag> </taglib>Now we can use our custom tag in a JSP page:
<%@ taglib prefix="st" uri="simpleTags" %> <!-- ... --> <st:simple/>A custom tag that has a body could be written quite easily. The doTag() calls the invoke() method on the JspFragment object returned by the getJspBody:
package ch10; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class SimpleTagTest2 extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { if(getJspBody() != null) getJspBody().invoke(null); else getJspContext().getOut().print("No body in this tag"); } }It could happen the JSP page call our tag with no body so, before using the JspFragment, we have to ensure it is not null - otherwise we are going to get a big fat exception.
We add in our TLD the declaration for the new tag, specifying that we expect a scriptless body content:
<tag> <description>marginally better use of a custom tag</description> <name>simple2</name> <tag-class>ch10.SimpleTagTest2</tag-class> <body-content>scriptless</body-content> </tag>Now we can modify the JSP page to use our new tag too. We test it with and without a body:
<!-- ... --> <st:simple2>This is the text I want to display</st:simple2> <st:simple2 />Much more stuff on Simple tag handlers in chapter ten of Head First Servlet and JSP.
No comments:
Post a Comment