If MyFaces ever delivers facelets support "built-in", it would be
something that MyFaces supplies.  UpdateActionListener is not a
component tag, so there's nothing to "rewrite" on the MyFaces side.  
It has to be handled with an equivalent facelets TagHandler.

On 10/3/05, Dave Brondsema <[EMAIL PROTECTED]> wrote:
> Is this class something that MyFaces should provide and its not?
>
> http://wiki.apache.org/myfaces/Use_Facelets_with_Tomahawk says
> <quote>
> If the Tag class does anything other than providing pass-through getters
> and setters, you will need to write a facelets TagHandler or submit
> patches to MyFaces to "standardize" the tag handler.
> </quote>
>
> Do we need to "standardize" UpdateActionListener?  Or is it up to
> Facelets/3rd-party to provide the tag handler?
>
> Andrew robinson wrote:
> > There is no way to do this out of the box. You need to create a tag
> > handler that fills the resposibility of the UpdateActionListenerTag. I
> > have created one. The code is attached. Just change the packages for
> > your needs
> >
> > The XML to register this is:
> >     <tag>
> >         <tag-name>updateActionListener</tag-name>
> >
> > <handler-class>org.bethanyefree.taghandlers.TomahawkUpdateActionListenerHandler</handler-class>
> >     </tag>
> >
> > Just add that to your facelet configuration file for the tomahawk
> > components.
> >
> > On 10/3/05, *Denis Parhomenko* <[EMAIL PROTECTED]
> > <mailto:[EMAIL PROTECTED]>> wrote:
> >
> >     Hi
> >
> >     I want use UpdateActionListener with facelets, but facelets told me
> >     that
> >
> >     com.sun.facelets.tag.TagException: /pages/admin/locations/edit.jsp
> >     @59,116 <t:updateActionListener> Tag Library supports namespace:
> >     http://myfaces.apache.org/tomahawk, but no tag was defined for name:
> >     updateActionListener
> >         at
> >     
> > com.sun.facelets.compiler.CompilationManager.pushTag(CompilationManager.java:155)
> >         at
> >     
> > com.sun.facelets.compiler.SAXCompiler$CompilationHandler.startElement(SAXCompiler.java:175)
> >
> >     As I understand i need add somthing to tomahawk.taglib.xml, but i
> >     don't know  what
> >
> >     Deniss
> >
> >
> >
> > ------------------------------------------------------------------------
> >
> > /**
> >  *
> >  */
> > package org.bethanyefree.taghandlers;
> >
> > import java.io.IOException;
> >
> > import javax.el.ELException;
> > import javax.faces.FacesException;
> > import javax.faces.application.Application;
> > import javax.faces.component.ActionSource;
> > import javax.faces.component.UIComponent;
> > import javax.faces.convert.Converter;
> > import javax.faces.el.ValueBinding;
> > import javax.faces.event.ActionListener;
> >
> > import org.apache.commons.logging.Log;
> > import org.apache.commons.logging.LogFactory;
> > import org.apache.myfaces.custom.updateactionlistener.UpdateActionListener;
> >
> > import com.sun.facelets.FaceletContext;
> > import com.sun.facelets.FaceletException;
> > import com.sun.facelets.tag.TagAttribute;
> > import com.sun.facelets.tag.TagConfig;
> > import com.sun.facelets.tag.TagHandler;
> > import com.sun.facelets.tag.jsf.ComponentConfig;
> >
> > /**
> >  * @author andrew
> >  *
> >  */
> > public class TomahawkUpdateActionListenerHandler
> >       extends TagHandler
> > {
> >       private static Log logger = 
> > LogFactory.getLog(TomahawkUpdateActionListenerHandler.class);
> >
> >       private TagAttribute converterAttr;
> >       private TagAttribute propertyAttr;
> >       private TagAttribute valueAttr;
> >
> >       /**
> >        * @param config
> >        */
> >       public TomahawkUpdateActionListenerHandler(ComponentConfig config)
> >       {
> >               this((TagConfig)config);
> >       }
> >
> >       /**
> >        * @param config
> >        */
> >       public TomahawkUpdateActionListenerHandler(TagConfig config)
> >       {
> >               super(config);
> >               valueAttr = getRequiredAttribute("value");
> >               propertyAttr = getRequiredAttribute("property");
> >               converterAttr = getAttribute("converter");
> >       }
> >
> >       /**
> >        * @see 
> > com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext, 
> > javax.faces.component.UIComponent)
> >        */
> >       public void apply(FaceletContext ctx, UIComponent parent)
> >               throws IOException, FacesException, FaceletException, 
> > ELException
> >       {
> >               logger.error("Apply called. Component: " + parent);
> >               ActionSource actionSource = (ActionSource)parent;
> >
> >               if (sourceHasProperty(actionSource))
> >                       return;
> >
> >               UpdateActionListener al = new UpdateActionListener();
> >
> >               if (converterAttr != null)
> >                       
> > al.setConverter((Converter)converterAttr.getObject(ctx));
> >
> >               Application app = ctx.getFacesContext().getApplication();
> >               ValueBinding vb = 
> > app.createValueBinding(valueAttr.getValue());
> >               al.setValueBinding(vb);
> >               vb = app.createValueBinding(propertyAttr.getValue());
> >               al.setPropertyBinding(vb);
> >               actionSource.addActionListener(al);
> >       }
> >
> >       private boolean sourceHasProperty(ActionSource source)
> >       {
> >               for (ActionListener listener : source.getActionListeners())
> >               {
> >                       if (listener instanceof UpdateActionListener == 
> > false) continue;
> >                       UpdateActionListener al = 
> > (UpdateActionListener)listener;
> >                       if 
> > (al.getPropertyBinding().getExpressionString().equals(
> >                               this.propertyAttr.getValue()))
> >                       {
> >                               logger.debug("Action listener already has a 
> > listener for " +
> >                                       this.propertyAttr.getValue());
> >                               return true;
> >                       }
> >               }
> >               logger.debug("Action listener for property is not present. 
> > Property: " +
> >                       this.propertyAttr.getValue());
> >               return false;
> >       }
> > }
>
>
> --
> Dave Brondsema
> Software Developer
> Cornerstone University
>
>
>

Reply via email to