Customer JSF component not worked !!
ericmacau Feb 17, 2006 1:34 AMHello,
I create a simple JSF component to use in Seam, but it seems not work.
And it just show nothing in the browser. When I view the HTML source, it just keep the TAG in the XHTML without rendered !
Anything I missed to do, please teach me ???
The following is my codes and configuration:
The test.jar file list.
test.jar |_ META-INF | |__ test.taglib.xml | |__ test.tld |__ test |_ CopyrightComponent.class |_ CopyrightTag.class
test.taglib.xml
<?xml version="1.0"> <!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "http://java.sun.com/dtd/facelet-taglib_1_0.dtd"> <facelet-taglib> <namespace>http://test.com/jsf/tags</namespace> <tag> <tag-name>copyright</tag-name> <component> <component-type>copyright</component-type> </tag> </facelet-taglib>
test.tld
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>rs</short-name> <uri>http://test.com/jsf/tags</uri> <description>Test tags</description> <tag> <name>copyright</name> <tag-class>mo.eric.reales.web.jsf.tag.CopyrightTag</tag-class> <body-content>JSP</body-content> <attribute> <name>startYear</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>message</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
The test.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jstl/core" xmlns:rs="http://test.com/jsf/tags"> <body> <rs:copyright startYear="2005" name="Eric Chow" message="All right reserved."></rs:copyright> </body> </html>
public class CopyrightTag extends UIComponentTag { /** * */ public CopyrightTag() { super(); // TODO Auto-generated constructor stub } /* (non-Javadoc) * @see javax.faces.webapp.UIComponentTag#getComponentType() */ @Override public String getComponentType() { // TODO Auto-generated method stub return "copyright"; } /* (non-Javadoc) * @see javax.faces.webapp.UIComponentTag#getRendererType() */ @Override public String getRendererType() { // TODO Auto-generated method stub return null; } public void release() { // the super class method should be called super.release(); } protected void setProperties(UIComponent component) { // the super class method should be called super.setProperties(component); } }
public class CopyrightComponent extends UIOutput { protected int startYear; protected String name; protected String message; /** * */ public CopyrightComponent() { super(); } public void encodeBegin(FacesContext context) throws IOException { ResponseWriter writer = context.getResponseWriter(); writer.startElement("div", this); Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); String toYear = (2006 == year) ? "" : " - " + year; writer.write("© "); writer.write(startYear); writer.write(toYear); writer.write(" "); writer.write(name); writer.write(" "); writer.write(message); } public void encodeEnd(FacesContext context) throws IOException { ResponseWriter writer = context.getResponseWriter(); writer.endElement("div"); } /** * @return Returns the message. */ public String getMessage() { return this.message; } /** * @param message The message to set. */ public void setMessage(String message) { this.message = message; } /** * @return Returns the name. */ public String getName() { return this.name; } /** * @param name The name to set. */ public void setName(String name) { this.name = name; } /** * @return Returns the startYear. */ public int getStartYear() { return this.startYear; } /** * @param startYear The startYear to set. */ public void setStartYear(int startYear) { this.startYear = startYear; } }