Thanks Leonardo. I'll get an issue opened tomorrow morning and attach a sample war to recreate.
Leonardo Uribe wrote:


2009/10/21 Michael Concini <[email protected] <mailto:[email protected]>>

    Leonardo,

    I disabled partial state saving, and everything works as expected.
     I had also previously tried using the same snippet in a JSP and
    it worked ok there as well.  So the problem is definitely only
    occurring with partial state saving enabled.

    I'm not sure I follow how the binding attribute would come into
    play in this scenario.  The value change listener is being engaged
    ok.  In fact, the problem seems to be occurring well before that
    listener is engaged.  The component's restoreState method is never
    actually being called, so when the value change listener is
    getting called during validation, its being passed the original
    value from the page, not the updated value that should have been
    restored from the previous state.
    -Mike


I remember that a delegate pattern is used when binding attribute is used. See org.apache.myfaces.taglib.core.ValueChangeListenerTag and org.apache.myfaces.view.facelets.tag.jsf.core.ValueChangeListenerHandler . The reason about why do that comes from jsf 1.2. If you file an issue and attach the example I'll take a look at this one.

regards

Leonardo Uribe
    Leonardo Uribe wrote:

        Hi

        2009/10/20 Michael Concini <[email protected]
        <mailto:[email protected]> <mailto:[email protected]
        <mailto:[email protected]>>>


           All,

           I've run into what appears to be a bug in the new state
           saving/restoring code for facelets.
           I've got a simple xhtml page with a one field form and a value
           change listener attached.  The listener simply outputs the old
           value and the new value to SystemOut.  On every postback, its
           showing the old value as what was originally set by the 'value'
           attribute and not the value from the previous request as
        would be
           expected.
           <h:form id="form1">
               <h:commandButton value="Press here" id="testListeners" />
               <h:inputText id="testValueChangeListener" value="some
        text">
                     <f:valueChangeListener
           binding="#{coreTagsBean.testValueChangeListener}"
           type="listener.TestValueChangeListener" />
                 </h:inputText>
           </h:form>

           I stepped through the code in the debugger, and when we get
        into
           DefaultFaceletsStateManagementStrategy.restoreView(), the
        states
           are always coming up null in the return object array
        returned form
           the HtmlResponseStateManager from this code snippet (lines
        160-161
           in my view)

                 state = (Object[]) manager.getState (context, viewId);
                 states = (Map<String, Object>) state[1];

           Since states is null, when we execute restoreStateFromMap(), we
           don't ever execute the restoreState() method on the component
           since we have not recovered the state data.

           I've stepped through the code for state saving, and it
        looks to me
           as though the state data for the input text field is being
        saved
           properly, but I'm not very familiar with how the state
           saving/restoring code works.  I'd be happy to continue
        doing the
           debugging if someone could point me in the right direction,
        but I
           would appreciate any help from those in the community who
        are more
           familiar with the state management code.


        The first part works as expected (state=null). For partial
        state saving, the component tree is built on every request. If
        nothing changes, no state is saved for the component. In jsf
        2.0, there was some changes related to the behavior of binding
        attribute, so maybe it is related to this one. It could be
        good to test is without partial state saving, to see how it
        should behave.

        regards,

        Leonardo Uribe
Thanks,
           Mike





Reply via email to