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]> 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;
}
}

