Hi Surija, Am I getting you right? Are you using Facelets 1.1.14 with a JSF 2.0 implementation? That's weird, as JSF 2.0 includes a newer version of Facelets. You shouldn't use a separate Facelets lib when using JSF 2.0.
Regards, Bart Kummel On Fri, Dec 18, 2009 at 16:22, Luka Surija <[email protected]> wrote: > Yeah, it works. Thank you. > > I'm just wondering the behavior is changed between facelets 1.1.13 and > 1.1.14? > > Luka Surija > > > > Jakob Korherr wrote: > >> Hi Luka, >> >> The JSF 2.0 specification only explains that when attaching a >> <f:setPropertyActionListener>, an ActionListener (with specific behavior) >> should be created and added to the nesting UIComponent (which has to >> implement ActionSource) with addActionListener(). >> >> From my point of view it is not clear which is added first, the action >> listener from the tag attribute »actionListener« or the nested action >> listener(s), but I think the order is: first tag attributes, then nested >> tags. >> >> You can try to work around this problem using <f:actionListener /> below >> <f:setPropertyActionListener> instead of the tag attribute >> »actionListener«, >> so that it will be added to the UIComponent after >> <f:setPropertyActionListener> and thus executed after >> <f:setPropertyActionListener>. >> >> I hope this works for you. >> >> Regards, >> >> Jakob Korherr >> >> >> 2009/12/16 Luka Surija <[email protected]> >> >> >> >>> It looks like i'm not familiar with JSF as much as I've thought. What is >>> the expected behavior in JSF 1.2 + Facelets for >>> f:setPropertyActionListener? >>> >>> code: >>> >>> <h:panelGroup rendered="#{PersonMB.person == null}"> >>> <h:dataTable value="#{PersonMB.allPersons}" var="item" > >>> <h:column> >>> <f:facet name="header">Name</f:facet> >>> #{item.name} >>> </h:column> <h:column> >>> <h:commandLink value="Edit" actionListener="#{PersonMB.edit}" > >>> <f:setPropertyActionListener value="#{item}" >>> target="#{PersonMB.person}" /> >>> </h:commandLink> >>> </h:column> >>> <h:column> >>> <h:commandLink actionListener="#{PersonMB.delete}" value="Delete" > >>> <f:setPropertyActionListener value="#{item}" >>> target="#{PersonMB.person}" /> >>> </h:commandLink> >>> </h:column> >>> </h:dataTable> >>> <h:commandLink onclick="dialog.show()" >>> actionListener="#{PersonMB.createPerson}" value="New person" /> >>> <br /> >>> <h:commandLink actionListener="#{PersonMB.reload}" value="Reload" /> >>> </h:panelGroup> >>> >>> PersonMB: >>> @EJB >>> PersonController controller; >>> >>> private Person person; >>> >>> public Person getPerson(){ >>> return person; >>> } >>> public void setPerson(Person _person){ >>> this.person=_person; >>> } >>> >>> public void delete(ActionEvent event){ >>> controller.delete(person); >>> } >>> >>> So here are two possible scenarios: >>> case #1: actionListener "delete" executes BEFORE >>> f:setPropertyActionListener sets value "item" to "person" >>> case #2: actionListener "delete" executes AFTER >>> f:setPropertyActionListener >>> sets value "item" to "person" >>> >>> .... >>> >>> In case #1 action listener "delete" isn't executed as expected because >>> "person" is null, but in case #2 function is executed properly. >>> >>> Why I'm asking this? >>> Till facelets version 1.1.14+trinidad and back on old Oracle ADF Faces >>> all >>> my applications behaved as described in scenario case #2, BUT with >>> trinidad+facelets 1.1.14 or IceFaces 1.8.x and now JSF 2.0 (mojarra) >>> behavior changed to scenario case #1. >>> >>> What is the proper behavior according to specification ? >>> >>> Best regards, >>> >>> Luka Surija >>> >>> >>> >>> >>> >> >> >> >

