A nice alternative to specifying the taglib using the web.xml is
to pack the component in a separate jar-file and to include 
the taglib within the META-INF folder. Only condition: the 
taglib-name must follow the pattern  XXX.taglib.xml.

Nice sideeffect: all xhtml-artifacts are read from the jar-file!!!

works smoothly

regards
Alexander

-----Original Message-----
From: kindsol [mailto:[EMAIL PROTECTED] 
Sent: Thursday, November 30, 2006 6:29 PM
To: MyFaces Discussion
Subject: Re: Using custom JSF-Components with Facelets

You also need to tell facelets to look at your custom-taglib:

Add to web.xml something like:

<context-param>
        <param-name>facelets.LIBRARIES</param-name>
        <param-value>/WEB-INF/custom-taglib.xml</param-value>
   </context-param

You can add more files to the param-value, just separate each file by  
a semicolon.

Good luck!

-Sol


On Nov 27, 2006, at 8:05 AM, Christian Wiesing wrote:

> Thanks,
>
> i created the Facelets-Taglib-File, but it still don't work. It  
> would be great if somebody could tell me what I do wrong. See my  
> source code below.
>
> Thanks.
>
> Christian
>
> ---------------------------------------
> view.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:cf="http://test.com/customtags";>
>        <cf:jsfhello hellomsg="Hello world."   />
>                                           </html>
>
> ---------------------------------------
> custom-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/customtags</namespace>
>    <tag>
>        <tag-name>jsfhello</tag-name>
>    <component>
>            <component-type>demo.JsfHello</component-type>
>        </component>      </tag>
>
> </facelet-taglib>
>
> ---------------------------------------
> faces-config --------------------------
> ---------------------------------------
> <faces-config>
>
>  <component>
>   <component-type>demo.JsfHello</component-type>
>   <component-class>demo.HelloUIComp</component-class>
>  </component>
>
>
> ---------------------------------------
> HelloUIComp.java -------------------
> ---------------------------------------
> package demo;
>
> import java.util.Date;
> import javax.faces.component.UIComponentBase;
> import javax.faces.context.FacesContext;
> import java.io.IOException;
> import javax.faces.context.ResponseWriter;
>
>
> public class HelloUIComp extends UIComponentBase
> {
>
>  public void encodeBegin(FacesContext context) throws IOException
>  {
>   ResponseWriter writer = context.getResponseWriter();
>   String hellomsg = (String)getAttributes().get("hellomsg");
>    writer.startElement("h3", this);
>   if(hellomsg != null)
>     writer.writeText(hellomsg, "hellomsg");
>   else
>     writer.writeText("Hello from a custom JSF UI Component!",  
> null);            writer.endElement("h3");    writer.startElement 
> ("p", this);
>   writer.writeText(" Today is: " + new Date(), null);
>   writer.endElement("p");   }
>
> public String getFamily()
> {
>  return "HelloFamily";
> }
> }
> ---------------------------------------
> FacesHelloTag -----------------------
> ---------------------------------------
>
> package demo;
>
> import javax.faces.application.Application;
> import javax.faces.webapp.UIComponentTag;
> import javax.faces.component.UIComponent;
> import javax.faces.el.ValueBinding;
> import javax.faces.context.FacesContext;
>
> public class FacesHelloTag extends UIComponentTag
> {
>  // Declare a bean property for the hellomsg attribute.
>  public String hellomsg = null;
>
>
>  // Associate the renderer and component type.
>  public String getComponentType() { return "demo.JsfHello"; }
>  public String getRendererType() { return null; }
>
>  protected void setProperties(UIComponent component)
>  {
>    super.setProperties(component);
>      // set hellomsg
>    if (hellomsg != null)
>    {
>      if (isValueReference(hellomsg))
>      {
>        FacesContext context = FacesContext.getCurrentInstance();
>        Application app = context.getApplication();
>        ValueBinding vb = app.createValueBinding(hellomsg);
>        component.setValueBinding("hellomsg",  
> vb);                      }
>      else
>        component.getAttributes().put("hellomsg", hellomsg);
>    }                         }
>
>  public void release()
>  {
>    super.release();
>    hellomsg = null;
>  }
>
>
>  public void setHellomsg(String hellomsg)
>  {
>    this.hellomsg = hellomsg;
>  }
> }
>
> Matthias Wessendorf schrieb:
>> Hi Christian,
>>
>> take a look at [1]. That describes the steps for Tomahawk custom
>> components; which are also true for your custom components.
>>
>> HTH,
>> Matthias
>>
>> [1] http://wiki.apache.org/myfaces/Use_Facelets_with_Tomahawk
>>
>> On 11/27/06, Christian Wiesing <[EMAIL PROTECTED]> wrote:
>>> Hello,
>>>
>>> how can I use custom JSF components with Facelets? I have some JSF
>>> components which I wanna use in my Facelets-Web-App.
>>>
>>> Is there any example or something like that?
>>>
>>> regards,
>>>
>>> Christian
>>>
>>>
>>>
>>>
>>>
>>
>>
>

Reply via email to