Question

I need to create composite component containing two h:commandLinks. And i want to pass f:setPropertyActionListeners from the client-code to be applied to both two commandLinks. Is this ever possible? I tried to use cc:insertChildren, but appropriate setters are not being fired.

<my:operationLink action="#{cc.attrs.bean.myAction}">
 <f:setPropertyActionListener for="<!-- whats here? -->" value="#{cc.attrs.someAttrOne}" target="#{cc.attrs.bean.someAttrTargetOne}"/>
 <f:setPropertyActionListener for="<!-- whats here? -->" value="#{cc.attrs.someAttrTwo}" target="#{cc.attrs.bean.someAttrTargetTwo}"/>

and my component:

<cc:implementation>
<h:commandLink id="textLink" value="myTextLink"><ui:insert/></h:commandLink>
<h:commandLink id="imgLink"><h:graphicImage url="/images/my.gif"/><ui:insert/></h:commandLink>

i need to apply actionlisteners to both links ( into ui:insert)

Was it helpful?

Solution

You need to declare a <cc:actionSource> in the composite interface with the "event name" in name (e.g. actionEvent, this is fully arbitrary to your choice) and the client IDs of those command links space separated in the targets.

<cc:interface>
    <cc:actionSource name="actionEvent" targets="textLink imgLink" />
</cc:interface>

Then you can use in the client:

<f:setPropertyActionListener for="actionEvent" ... />

Don't forget to remove <ui:insert>. This is indeed definitely not the right way.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top