FYI: https://issues.apache.org/jira/browse/MYFACES-3112
-Matthias On Wed, Mar 16, 2011 at 6:07 PM, Jakob Korherr <jakob.korh...@gmail.com> wrote: > Matthias, please always answer to the mailing list too, not just to my > private email address. Otherwise no one can follow our discussion! > > I am afraid you hit a problem of JSF 2.0. It's currently not possible > to retarget a special method expression (like valueChangeListener) > from one composite component to another (and, of course, also not to > its children). > > See JSF spec issue: > http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-755 > > Regards, > Jakob > > 2011/3/16 ZEILERBAUER Matthias <matthias.zeilerba...@tirol.gv.at>: >> >> Here it is: >> >> "checkbox.xhtml" >> <composite:interface name="checkbox"> >> <composite:attribute name="valueChangeListener" >> method-signature="void (javax.faces.event.ValueChangeEvent)" >> targets="${cc.attrs.id}" /> >> </composite:interface> >> >> <composite:implementation> >> <h:panelGroup> >> <template:labelinput2 id="${cc.attrs.id}"> >> <f:facet name="inputFacet"> >> <h:selectBooleanCheckbox id="inputComponent" >> value="#{cc.attrs.value}"> >> <composite:insertChildren /> >> </h:selectBooleanCheckbox> >> </f:facet> >> </template:labelinput2> >> </h:panelGroup> >> </composite:implementation> >> >> >> >> "labelinput2.xhtml" >> <composite:interface name="labelinput" componentType="javax.faces.Input"> >> <!-- Events --> >> <composite:attribute name="valueChangeListener" >> method-signature="void f(javax.faces.event.ValueChangeEvent)" >> targets="inputComponent" /> >> <!-- Facets --> >> <composite:facet name="inputFacet" /> >> <composite:facet name="textFacet" /> >> <!-- Component Ids --> >> <composite:editableValueHolder name="inputComponent" /> >> </composite:interface> >> >> <composite:implementation> >> <h:panelGroup> >> <div> >> <h:panelGroup> >> <div> >> <h:outputLabel >> for="inputComponent">#{cc.attrs.label}</h:outputLabel> >> </div> >> </h:panelGroup> >> <div> >> <composite:renderFacet name="inputFacet" >> required="true" /> >> <composite:renderFacet name="textFacet" /> >> <composite:insertChildren /> >> </div> >> <div> >> <h:message for="inputComponent" /> >> </div> >> </div> >> </h:panelGroup> >> </composite:implementation> >> >> >> LG Matthias >> >> -----Ursprüngliche Nachricht----- >> Von: sethfromaust...@gmail.com [mailto:sethfromaust...@gmail.com] Im Auftrag >> von Jakob Korherr >> Gesendet: Mittwoch, 16. März 2011 16:54 >> An: MyFaces Development >> Cc: ZEILERBAUER Matthias >> Betreff: Re: ValueChangeListener + composite components >> >> Hi, >> >> the standard component is a UINamingContainer. Could you please send >> me the whole markup of the composite component? >> >> Regards, >> Jakob >> >> 2011/3/16 ZEILERBAUER Matthias <matthias.zeilerba...@tirol.gv.at>: >>> Thanks for the code. But I still don't get it working. >>> I didn't specify a componentType for my implementation, so it should be a >>> standard implementation which does inherit the right finComponent() api. >>> Also my nested composition is a standard implementation. But I do know now >>> that the problem is with my nested compositions, that the >>> ValueChangeListener is not passed to this nested composition. How do I do >>> that? >>> >>> -----Ursprüngliche Nachricht----- >>> Von: sethfromaust...@gmail.com [mailto:sethfromaust...@gmail.com] Im >>> Auftrag von Jakob Korherr >>> Gesendet: Mittwoch, 16. März 2011 16:21 >>> An: MyFaces Development >>> Cc: ZEILERBAUER Matthias >>> Betreff: Re: ValueChangeListener + composite components >>> >>> Here is the code from >>> FaceletViewDeclarationLanguage.retargetMethodExpressions: >>> >>> UIComponent innerComponent = topLevelComponent.findComponent(target); >>> if (innerComponent == null) >>> { >>> if (log.isLoggable(Level.SEVERE)) >>> log.severe("Inner component " + target + " not found when >>> retargetMethodExpressions"); >>> continue; >>> } >>> >>> ...with topLevelComponent beeing the composite component. Thus, in >>> your example, your composite component needs to be able to find the >>> target component via findComponent(). >>> >>> Please refer to the javadoc of findComponent() and check if it is >>> implement correctly on all the components inside your composite >>> component. My guess is that the parent component of the f:facet does >>> not check his facets in findComponent(). >>> >>> Regards, >>> Jakob >>> >>> 2011/3/16 ZEILERBAUER Matthias <matthias.zeilerba...@tirol.gv.at>: >>>> Doesn't work. I already proved it. >>>> >>>> LG Matthias >>>> >>>> -----Ursprüngliche Nachricht----- >>>> Von: sethfromaust...@gmail.com [mailto:sethfromaust...@gmail.com] Im >>>> Auftrag von Jakob Korherr >>>> Gesendet: Mittwoch, 16. März 2011 16:03 >>>> An: MyFaces Development >>>> Cc: ZEILERBAUER Matthias >>>> Betreff: Re: ValueChangeListener + composite components >>>> >>>> Hi Matthias, >>>> >>>> Try using the relative clientid of the h:inputText from within your >>>> composite component, thus something like >>>> container1:container2:inputComponent. >>>> >>>> Also, please ask questions like this one only at >>>> us...@myfaces.apache.org, thanks. >>>> >>>> Regards, >>>> Jakob >>>> >>>> 2011/3/16 ZEILERBAUER Matthias <matthias.zeilerba...@tirol.gv.at>: >>>>> Hello guys, >>>>> >>>>> I have a problem with the valueChangeListener on my composite component. >>>>> I = >>>>> >>>>> have following structure: >>>>> >>>>> <composite:interface name=3D"checkbox"> >>>>> >>>>> ... >>>>> >>>>> <composite:attribute name=3D"valueChangeListener" >>>>> targets=3D"inputComponent= >>>>> >>>>> " /> >>>>> >>>>> ... >>>>> >>>>> </composite:interface> >>>>> >>>>> <composite:implementation> >>>>> >>>>> <template:c1> >>>>> >>>>> ... >>>>> >>>>> <f:facet name=3D"inputFacet"> >>>>> >>>>> <h:inputText id=3D"inputComponent" /> >>>>> >>>>> </f:facet> >>>>> >>>>> ... >>>>> >>>>> </template:c1> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> My error message is: >>>>> >>>>> "FaceletViewDe E Inner component valueChangeListener not found when >>>>> retarge= >>>>> >>>>> tMethodExpressions" >>>>> >>>>> When I tried to give the >>>>> >>>>> <composite:attribute name=3D"valueChangeListener" >>>>> targets=3D"inputComponent= >>>>> >>>>> " /> on my c1-Interface the Error-Message didn't appear, but the >>>>> ValueChang= >>>>> >>>>> eListener still wasn't called. >>>>> >>>>> Second thing I tried was to give the >>>>> >>>>> <h:inputText id=3D"inputComponent" /> not in the facet-Definition, but >>>>> only= >>>>> >>>>> in my implementation and then the ValueChangeListener worked. >>>>> >>>>> What is my mistake, or does composition not work properly with facets? >>>>> >>>>> LG >>>>> >>>>> >>>> >>>> >>>> >>>> -- >>>> Jakob Korherr >>>> >>>> blog: http://www.jakobk.com >>>> twitter: http://twitter.com/jakobkorherr >>>> work: http://www.irian.at >>>> >>> >>> >>> >>> -- >>> Jakob Korherr >>> >>> blog: http://www.jakobk.com >>> twitter: http://twitter.com/jakobkorherr >>> work: http://www.irian.at >>> >> >> >> >> -- >> Jakob Korherr >> >> blog: http://www.jakobk.com >> twitter: http://twitter.com/jakobkorherr >> work: http://www.irian.at >> > > > > -- > Jakob Korherr > > blog: http://www.jakobk.com > twitter: http://twitter.com/jakobkorherr > work: http://www.irian.at > -- Matthias Wessendorf blog: http://matthiaswessendorf.wordpress.com/ sessions: http://www.slideshare.net/mwessendorf twitter: http://twitter.com/mwessendorf