Hi Henry,

I think you have a mistake in the config (like renderer-type).
here is a *simple* extended version of MessageRenderer.

Java class:
package net.wessendorf.trinidad;

import java.io.IOException;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;

import org.apache.myfaces.trinidad.bean.FacesBean;
import org.apache.myfaces.trinidad.component.core.output.CoreMessage;
import org.apache.myfaces.trinidad.context.RenderingContext;
import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.MessageRenderer;

public class CustomMessageRenderer extends MessageRenderer
{
  public CustomMessageRenderer()
  {
    this(CoreMessage.TYPE);
  }

  protected CustomMessageRenderer(FacesBean.Type type)
  {
    super(type);
  }
  @Override
  protected void encodeAll(
    FacesContext        context,
    RenderingContext    rc,
    UIComponent         component,
    FacesBean           bean) throws IOException
  {
    ResponseWriter writer = context.getResponseWriter();
    writer.startElement("div", null);
    writer.write("BLAH");
    writer.endElement("div");

    super.encodeAll(context, rc, component, bean);
  }
}


required xml:
  <render-kit>
    <render-kit-id>org.apache.myfaces.trinidadinternal.core</render-kit-id>
    <renderer>
      <component-family>
        org.apache.myfaces.trinidad.Message
      </component-family>
      <renderer-type>
        org.apache.myfaces.trinidad.Message
      </renderer-type>
      <renderer-class>
        net.wessendorf.trinidad.CustomMessageRenderer
      </renderer-class>
    </renderer>
  </render-kit>

(note that now <tr:message /> is using this custom renderer.

-Matthias

On Feb 20, 2008 12:26 AM, Henry Eduardo Iguaro <[EMAIL PROTECTED]> wrote:
> hi, i'm creating a custom renderer for a
> org.apache.myfaces.trinidad.component.core.output.CoreMessage component
> (aka, a <tr:message /> component), the custom renderer uses javascript
>  to simulate a small balloon message box. After searching in the source
> code, i've found that the default renderer for the CoreMessage is the
> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.MessageRenderer, so
> i created a copy of it and renamed to my renderer class name, this way i
> could test the tag handling before plugin mine own renderer
>
> This is the code that registers the renderer in my faces-config.xml
> file.
>
> <render-kit>
>         <render-kit-class>
> org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderKit
>          </render-kit-class>
>         <renderer>
>                 <component-family>
>                         org.apache.myfaces.trinidad.Message
>                 </component-family>
>                  <renderer-type>
>                         org.apache.myfaces.trinidad.CoreMessage
>                 </renderer-type>
>                 <renderer-class>
>  gob.sudeban.util.jsf.custom.renderers.MessageBalloonRenderer
>                 </renderer-class>
>         </renderer>
> </render-kit>
>
> This is the component tag from my tld file:
>          <tag>
>             <name>balloon-message</name>
> <tag-class>gob.sudeban.util.jsf.custom.tags.BalloonMessageTag</tag-class>
>                 ...
>
> The same atributes for the message tag from the tr.tld file in
> trinidad-impl-1.0.6.jar
>                 ...
>         </tag>
>
>
> The class gob.sudeban.util.jsf.custom.tags.BalloonMessageTag is also a
>  renamed copy of
> org.apache.myfaces.trinidadinternal.taglib.core.output.CoreMessageTag
>
> This is the jsp file i use to test the component:
>
> <?xml version="1.0" encoding="UTF-8" ?>
>  <%@ page language="java" contentType="text/html; charset=UTF-8"
> pageEncoding="UTF-8"%>
> <%@ taglib uri="http://java.sun.com/jsf/html"; prefix="h"%>
>  <%@ taglib uri="http://java.sun.com/jsf/core"; prefix="f"%>
> <%@ taglib uri="http://myfaces.apache.org/trinidad"; prefix="tr" %>
>  <%@ taglib uri="http://myfaces.apache.org/trinidad/html"; prefix="trh" %>
> <%@ taglib uri="http://sudeban.gob.ve/jsf/component/tags";
>  prefix="sudeban" %>
>
> <f:view>
>
> <trh:head>
> </trh:head>
>
> <trh:body>
>         <tr:form>
>                 <tr:panelFormLayout >
>                          <sudeban:balloon-message message="This is a
> message" />
>                 </tr:panelFormLayout>
>         </tr:form>
> </trh:body>
>
> When i test the component i get the following:
>
> (HtmlRenderKitImpl.java:79) Unsupported component-family/renderer-type:
> org.apache.myfaces.trinidad.Message/gob.sudeban.util.jsf.custom.renderers.MessageBalloonRenderer
>  19-feb-2008 16:30:22
> org.apache.myfaces.trinidadinternal.renderkit.RenderKitBase getRenderer
> WARNING: Renderer
> 'gob.sudeban.util.jsf.custom.renderers.MessageBalloonRenderer' not found
>  for component family 'org.apache.myfaces.trinidad.Message'
> 19-feb-2008 16:30:22
> org.apache.myfaces.trinidad.component.UIXComponentBase _getRendererImpl
> WARNING: Could not find renderer for CoreMessage[UIXFacesBeanImpl,
>  id=_idJsp4] rendererType =
> gob.sudeban.util.jsf.custom.renderers.MessageBalloonRenderer
> (UIComponentTag.java:500) Exited encodeEnd for client-Id: _idJsp1
> 19-feb-2008 16:30:22
>  org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderKit
> encodeFinally
> WARNING: No RenderingContext available
> 19-feb-2008 16:30:22
> org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderKit
>  encodeFinally
> WARNING: No RenderingContext available
>
> And anything get rendered...
>
> What am i doing wrong? It's possible to register another render for a
> core component like this?
>
> Any help would be appreciated
>
> (PS: Please excuse my english)
>
> Henry Iguaro
>



-- 
Matthias Wessendorf

further stuff:
blog: http://matthiaswessendorf.wordpress.com/
sessions: http://www.slideshare.net/mwessendorf
mail: matzew-at-apache-dot-org

Reply via email to