Thursday, September 3, 2009

Creating custom tags in EDIT view on Pluto

Imagine you have a portlet, and you want to have an EDIT view that displays a form, and on the form you want some precalculated content, such as a dropdown list of available hosts. But how would you do it? You could compute a <select> element and fill it with available hosts by using some Java, but that would clutter up the JSP file. But with a custom tag library you could just do something like:

<mytag:hostlist subnet=""/>

And that would produce a list of hosts that respond to PING or HTTP or SNMP on the specified subnet. Now how do you do that?

Define a taglib

As in the last post, these are manual instructions. A taglib is just a jar containing at least one .tld file in META-INF. You need a tld file to link the classes in the taglib to their names. Here's an example:

<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib xmlns="htp://"
    An example Hello World tag.

This can go into a directory META-INF inside a directory tld:

  • tld
    • META-INF
      • hello.tld

Now it's time to build the tag class:

package examples.taglibs;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
public class HelloWorldTag extends TagSupport
 private static final long serialVersionUID = 1L;
 public int doStartTag() throws JspException
  JspWriter out = pageContext.getOut();
   out.println( "<h1>Hello World!</h1>");
  catch ( IOException ioe )
   throw new JspException( ioe );
  return SKIP_BODY;
 public int doEndTag() throws JspException
  return EVAL_PAGE;

This doesn't yet generate a <select> element, but you get the idea how to do it. Compile the java thus:

javac lib/jsp-api.jar tld/src/examples/taglibs/*.java -d tld

which puts HelloWorldTag.class into tld/examples/taglibs, surprisingly. Then make a jar of the taglib, by cd-ing into the tld directory:

jar cf ../hello.jar META-INF examples

Put your hello.jar taglib into the WEB-INF/lib directory of your web application and you can then call it up from edit.jsp:

<%@ taglib uri="/WEB-INF/lib/hello.jar" prefix="mytag" %>

That gives you <h1>Hello world!</h1> in EDIT mode. To get a dropdown list just modify the java code to generate a list and enclose it in <select> tags.

No comments:

Post a Comment