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

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to