package com.java2s;
///Custom tag
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.TryCatchFinally;
/**
* This tag generates a thumbnail image using HTML img tag, next to text
* message. The user specifies the content of the message and the Heading level
* (i.e.,
* <H1>-
* <H2>)
*/
public class LogoTag extends BodyTagSupport implements TryCatchFinally {
private String heading = null;
private String image = null;
//stamp.gif, 42 x 54
private String width = null;
private String height = null;
public int doStartTag() throws JspException {
//this method assumes that attribute properties have been set.
try {
int h = new Integer(heading).intValue();
if (!(h > 0 && h < 7))
throw new JspException(
"The 'heading' attribute value must between 1 and 6 inclusive.");
} catch (Exception e) {
throw new JspException(e.getMessage());
}
return EVAL_BODY_BUFFERED;
}
public int doEndTag() throws JspException {
JspWriter out = pageContext.getOut();
String imgDir = ((HttpServletRequest) pageContext.getRequest())
.getContextPath()
+ "/images/";
String message = getBodyContent().getString().trim();
try {
out.println(new StringBuffer("<img src=\"").append(imgDir).append(
image).append("\" width=\"").append(width).append(
"\" height=\"").append(height).append("\" align=\"left\">")
.append("<H").append(heading).append(">").append(message)
.append("</H").append(heading).append(">").toString());
} catch (java.io.IOException io) {
}
return EVAL_PAGE;
}
public void doCatch(Throwable t) {
try {
pageContext.getOut().println(t.getMessage() + "<br />");
} catch (java.io.IOException io) {
}
}
public void doFinally() {
//do nothing here, since we don't have any resources open
//like database connections
}
public void setHeading(String level) {
this.heading = level;
}
public void setImage(String name) {
this.image = name;
}
public void setWidth(String width) {
this.width = width;
}
public void setHeight(String height) {
this.height = height;
}
public void release() {
heading = null;
image = null;
width = null;
height = null;
}
}
//
package com.java2s;
import java.io.IOException;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
/**
* This tag generates a thumbnail image using HTML img tag, next to text
* message. The user specifies the content of the message and the Heading level
* (i.e.,
* <H1>-
* <H2>)
*/
public class SimpleLogoTag extends SimpleTagSupport {
private String heading = null;
private String image = null;
private String width = null;
private String height = null;
public void doTag() throws JspException, IOException {
JspContext jspContext = getJspContext();
//this method assumes that attribute properties have been set.
try {
int h = new Integer(heading).intValue();
if (!(h > 0 && h < 7))
throw new JspException(
"The 'heading' attribute value must between 1 and 6 inclusive.");
} catch (Exception e) {
throw new JspException(e.getMessage());
}
JspWriter out = jspContext.getOut();
String imgDir = (String) jspContext.findAttribute("imgDir");
if (imgDir == null || "".equals(imgDir))
throw new JspException(
"No attribute provided specifying the application's image directory.");
out.println(new StringBuffer("<img src=\"").append(imgDir)
.append(image).append("\" width=\"").append(width).append(
"\" height=\"").append(height).append(
"\" align=\"left\">").append("<H").append(heading)
.append(">").toString());
getJspBody().invoke(null);
out.println(new StringBuffer("</H").append(heading).append(">")
.toString());
}
public void setHeading(String level) {
this.heading = level;
}
public void setImage(String name) {
this.image = name;
}
public void setWidth(String width) {
this.width = width;
}
public void setHeight(String height) {
this.height = height;
}
}
//logo.tag
<%@ tag body-content="scriptless" description="Writes the HTML code for inserting a logo." %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ attribute name="heading" required="true" rtexprvalue=
"true" description="The heading level for the logo."%>
<%@ attribute name="image" required="true" rtexprvalue=
"true" description="The image name for the logo."%>
<%@ attribute name="width" required="true" rtexprvalue=
"true" description="The image width for the logo."%>
<%@ attribute name="height" required="true" rtexprvalue=
"true" description="The image height for the logo."%>
<img src="${imgDir}${image}" width=
"${width}" height="${height}" align="left">
<H${heading}>
<jsp:doBody/></H${heading}>
//logoTest.jsp
<%@ taglib uri="java2s.com.tags" prefix="cbck" %>
<html>
<head><title></title></head>
<body>
<% session.setAttribute("imgDir",(request.getContextPath() + "/images/")) %>
<cbck:logo heading="2" image="stamp.gif" width="42" height="54">Thanks for visiting</cbck:logo>
Here's all the other stuff this page contains...
</body>
</html>
//myTag.tld
<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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>cbck</short-name>
<uri>java2s.com.tags</uri>
<description>Cookbook custom tags</description>
<listener>
<listener-class>com.java2s.ReqListener</listener-class>
</listener>
<tag>
<name>logo</name>
<tag-class>com.java2s.LogoTag</tag-class>
<body-content>scriptless</body-content>
<description>This tag writes a logo inside the JSP.</description>
<attribute>
<name>heading</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description>The heading level for the logo; 1 through 6.</description>
</attribute>
<attribute>
<name>image</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description>The image name for the logo.</description>
</attribute>
<attribute>
<name>width</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description>The image width for the logo.</description>
</attribute>
<attribute>
<name>height</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description>The image height for the logo.</description>
</attribute>
</tag>
</taglib>
|