Matthias, Sorry about this. I'll make an effort to pay more attention to the issue tracker from now on.
Yes, the RI places the implementation w/ the tags. I have pinged their list about moving this under javax.faces.* ( see the TODO at the top of the class ). I'm not sure the idea will fly too far. Dennis Byrne >-----Original Message----- >From: Matthias Wessendorf [mailto:[EMAIL PROTECTED] >Sent: Sunday, June 18, 2006 03:06 PM >To: 'MyFaces Development' >Subject: Re: svn commit: r415171 - in >/myfaces/core/branches/jsf12/impl/src/main: >java/org/apache/myfaces/taglib/core/ java/org/apache/myfaces/util/ tld/ > >the RI has the pattern that the ActionListener inside the taglib_core package. > >I don't like this. I'll remove the SetPropertyActionListener clazz to >o.a.m.event. > >-Matthias > >On 6/18/06, Matthias Wessendorf <[EMAIL PROTECTED]> wrote: >> Hey Dennis, >> >> interesting. Yesterday evening I assigned that guy to me >> >> http://issues.apache.org/jira/browse/MYFACES-1240 >> >> I started to implement it and I was about to commit, >> and now I see your commit. >> >> I think when two are doing the same, it is a waste of effort :-) >> >> We should cordinate it a bit better, right? >> >> For JSF 1.2 there is special component >> >> http://tinyurl.com/qjd6y >> >> Regards, >> Matthias >> >> On 6/18/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: >> > Author: dennisbyrne >> > Date: Sun Jun 18 11:39:08 2006 >> > New Revision: 415171 >> > >> > URL: http://svn.apache.org/viewvc?rev=415171&view=rev >> > Log: >> > created SetPropertyActionListenerTag and it's ActionListener. >> > placed f:setPropertyActionListener in TLD >> > added Java 5 to DebugUtils >> > >> > Added: >> > >> > myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/SetPropertyActionListener.java >> > >> > myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/SetPropertyActionListenerTag.java >> > Modified: >> > >> > myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/util/DebugUtils.java >> > myfaces/core/branches/jsf12/impl/src/main/tld/myfaces_core.tld >> > >> > Added: >> > myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/SetPropertyActionListener.java >> > URL: >> > http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/SetPropertyActionListener.java?rev=415171&view=auto >> > ============================================================================== >> > --- >> > myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/SetPropertyActionListener.java >> > (added) >> > +++ >> > myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/SetPropertyActionListener.java >> > Sun Jun 18 11:39:08 2006 >> > @@ -0,0 +1,103 @@ >> > +package org.apache.myfaces.taglib.core; >> > + >> > +import javax.el.ELContext; >> > +import javax.el.ValueExpression; >> > +import javax.faces.component.StateHolder; >> > +import javax.faces.context.FacesContext; >> > +import javax.faces.event.AbortProcessingException; >> > +import javax.faces.event.ActionEvent; >> > +import javax.faces.event.ActionListener; >> > + >> > +/** >> > + * TODO this really needs to be under javax.faces.* >> > + * >> > + * @author Dennis Byrne >> > + * @since 1.2 >> > + */ >> > + >> > +public class SetPropertyActionListener implements ActionListener, >> > StateHolder >> > +{ >> > + >> > + private ValueExpression target; >> > + >> > + private ValueExpression value; >> > + >> > + private boolean _transient ; >> > + >> > + public SetPropertyActionListener(){} >> > + >> > + public SetPropertyActionListener(ValueExpression target, >> > ValueExpression value) >> > + { >> > + this.target = target; >> > + this.value = value; >> > + } >> > + >> > + public void processAction(ActionEvent actionEvent) throws >> > AbortProcessingException >> > + { >> > + >> > + if( target == null ) >> > + throw new AbortProcessingException("@target has not been >> > set"); >> > + >> > + if( value == null ) >> > + throw new AbortProcessingException("@value has not been set"); >> > + >> > + FacesContext ctx = FacesContext.getCurrentInstance(); >> > + >> > + if( ctx == null ) >> > + throw new AbortProcessingException("FacesContext ctx is >> > null"); >> > + >> > + ELContext ectx = ctx.getELContext(); >> > + >> > + if( ectx == null ) >> > + throw new AbortProcessingException("ELContext ectx is null"); >> > + >> > + target.setValue(ectx, value.getValue(ectx)); >> > + >> > + } >> > + >> > + public Object saveState(FacesContext context) >> > + { >> > + Object[] state = new Object[2]; >> > + state[0] = target; >> > + state[1] = value; >> > + return state; >> > + } >> > + >> > + public void restoreState(FacesContext context, Object state) >> > + { >> > + Object[] values = new Object[2]; >> > + target = (ValueExpression) values[0]; >> > + value = (ValueExpression) values[1]; >> > + } >> > + >> > + public boolean isTransient() >> > + { >> > + return _transient; >> > + } >> > + >> > + public void setTransient(boolean _transient) >> > + { >> > + this._transient = _transient; >> > + } >> > + >> > + public ValueExpression getTarget() >> > + { >> > + return target; >> > + } >> > + >> > + public void setTarget(ValueExpression target) >> > + { >> > + this.target = target; >> > + } >> > + >> > + public ValueExpression getValue() >> > + { >> > + return value; >> > + } >> > + >> > + public void setValue(ValueExpression value) >> > + { >> > + this.value = value; >> > + } >> > + >> > +} >> > >> > Added: >> > myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/SetPropertyActionListenerTag.java >> > URL: >> > http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/SetPropertyActionListenerTag.java?rev=415171&view=auto >> > ============================================================================== >> > --- >> > myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/SetPropertyActionListenerTag.java >> > (added) >> > +++ >> > myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/SetPropertyActionListenerTag.java >> > Sun Jun 18 11:39:08 2006 >> > @@ -0,0 +1,97 @@ >> > +package org.apache.myfaces.taglib.core; >> > + >> > +import javax.el.ValueExpression; >> > +import javax.faces.component.ActionSource; >> > +import javax.faces.component.UIComponent; >> > +import javax.faces.event.ActionListener; >> > +import javax.faces.webapp.UIComponentClassicTagBase; >> > +import javax.servlet.jsp.JspException; >> > +import javax.servlet.jsp.tagext.TagSupport; >> > + >> > +import org.apache.commons.logging.Log; >> > +import org.apache.commons.logging.LogFactory; >> > + >> > +/** >> > + * @author Dennis Byrne >> > + * @since 1.2 >> > + */ >> > + >> > +public class SetPropertyActionListenerTag extends TagSupport >> > +{ >> > + >> > + private static final Log log = >> > LogFactory.getLog(SetPropertyActionListenerTag.class); >> > + >> > + private ValueExpression target; >> > + >> > + private ValueExpression value; >> > + >> > + public int doStartTag() throws JspException >> > + { >> > + >> > + if(log.isDebugEnabled()) >> > + log.debug("JSF 1.2 Spec : Create a new instance of the >> > ActionListener"); >> > + >> > + ActionListener actionListener = new >> > SetPropertyActionListener(target, value); >> > + >> > + UIComponentClassicTagBase tag = >> > UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext); >> > + >> > + if(tag == null) >> > + throw new JspException("Could not find a " + >> > + "parent UIComponentClassicTagBase ... is this " + >> > + "tag in a child of a UIComponentClassicTagBase?"); >> > + >> > + if(tag.getCreated()) >> > + { >> > + >> > + UIComponent component = tag.getComponentInstance(); >> > + >> > + if(component == null) >> > + throw new JspException(" Could not locate a UIComponent " >> > + >> > + "for a UIComponentClassicTagBase w/ a " + >> > + "JSP id of " + tag.getJspId()); >> > + >> > + if( ! ( component instanceof ActionSource ) ) >> > + throw new JspException("Component w/ id of " + >> > component.getId() >> > + + " is associated w/ a tag w/ JSP id of " + >> > tag.getJspId() >> > + + ". This component is of type " + >> > component.getClass() >> > + + ", which is not an " + ActionSource.class ); >> > + >> > + if(log.isDebugEnabled()) >> > + log.debug(" ... register it with the UIComponent " + >> > + "instance associated with our most immediately " + >> > + "surrounding UIComponentTagBase"); >> > + >> > + ((ActionSource)component).addActionListener(actionListener); >> > + >> > + } >> > + >> > + return SKIP_BODY; >> > + } >> > + >> > + public ValueExpression getTarget() >> > + { >> > + return target; >> > + } >> > + >> > + public void setTarget(ValueExpression target) >> > + { >> > + this.target = target; >> > + } >> > + >> > + public ValueExpression getValue() >> > + { >> > + return value; >> > + } >> > + >> > + public void setValue(ValueExpression value) >> > + { >> > + this.value = value; >> > + } >> > + >> > + public void release() >> > + { >> > + target = null; >> > + value = null; >> > + } >> > + >> > +} >> > >> > Modified: >> > myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/util/DebugUtils.java >> > URL: >> > http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/util/DebugUtils.java?rev=415171&r1=415170&r2=415171&view=diff >> > ============================================================================== >> > --- >> > myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/util/DebugUtils.java >> > (original) >> > +++ >> > myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/util/DebugUtils.java >> > Sun Jun 18 11:39:08 2006 >> > @@ -48,10 +48,10 @@ >> > private static final Log log = LogFactory.getLog(DebugUtils.class); >> > >> > //Attributes that should not be printed >> > - private static final HashSet IGNORE_ATTRIBUTES; >> > + private static final HashSet<String> IGNORE_ATTRIBUTES; >> > static >> > { >> > - IGNORE_ATTRIBUTES = new HashSet(); >> > + IGNORE_ATTRIBUTES = new HashSet<String>(); >> > IGNORE_ATTRIBUTES.add("attributes"); >> > IGNORE_ATTRIBUTES.add("children"); >> > IGNORE_ATTRIBUTES.add("childCount"); >> > >> > Modified: myfaces/core/branches/jsf12/impl/src/main/tld/myfaces_core.tld >> > URL: >> > http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/tld/myfaces_core.tld?rev=415171&r1=415170&r2=415171&view=diff >> > ============================================================================== >> > --- myfaces/core/branches/jsf12/impl/src/main/tld/myfaces_core.tld >> > (original) >> > +++ myfaces/core/branches/jsf12/impl/src/main/tld/myfaces_core.tld Sun Jun >> > 18 11:39:08 2006 >> > @@ -601,5 +601,20 @@ >> > </attribute> >> > </tag> >> > >> > + <!-- setPropertyActionListener --> >> > + >> > + <tag> >> > + <name>setPropertyActionListener</name> >> > + >> > <tag-class>org.apache.myfaces.taglib.core.SetPropertyActionListenerTag</tag-class> >> > + <body-content>empty</body-content> >> > + <attribute> >> > + <name>target</name> >> > + <required>true</required> >> > + </attribute> >> > + <attribute> >> > + <name>value</name> >> > + <required>true</required> >> > + </attribute> >> > + </tag> >> > >> > </taglib> >> > >> > >> > >> >> >> -- >> Matthias Wessendorf >> Aechterhoek 18 >> 48282 Emsdetten >> blog: http://jroller.com/page/mwessendorf >> mail: mwessendorf-at-gmail-dot-com >> > > >-- >Matthias Wessendorf >Aechterhoek 18 >48282 Emsdetten >blog: http://jroller.com/page/mwessendorf >mail: mwessendorf-at-gmail-dot-com >
