0 Replies Latest reply on May 15, 2008 5:15 AM by courtneycouch

    strange behavior with ajax4jsf in long-running conversation

    courtneycouch

      I'm not sure if this is expected behavior, but when entering this:



      <h:inputText
      value="#{memberExample.identifier}" id="referrerIdentifierField2">
           <a:support event="onblur" reRender="repeater,referrerIdentifierField2" limitToList="true"
           bypassUpdates="false" />
      </h:inputText>



      outside of a long running conversation it works without a hitch.  Updating the model and reRendering the necessary items.


      Running inside of a long running conversation it only works correctly if I dont have it reRender itself.


      To demonstrate this I have:



      <h:inputText
      value="#{memberExample.identifier}" id="referrerIdentifierField2">
           <a:support event="onblur" reRender="repeater,referrerIdentifierField2" limitToList="true"
           bypassUpdates="false" />
      </h:inputText>
      
      <h:inputText value="#{memberExample.identifier}" id="referrerIdentifierField">
           <a:support event="onblur" reRender="repeater" limitToList="true"
           bypassUpdates="false"/>
      </h:inputText>
      
      <h:outputText id="repeater" value="#{memberExample.communityIdentifier}"/>



      In a long-running conversation and when typing into the first box, the model is not updated (and when rerendered the input box is blank after a blur and subsequent render).  If using the second box, it updates the model and renders the repeater fine.


      The only difference is that the a:support tag does not try to reRender the field being submitted.


      Since it works fine outside of a long-running conversation I assume there is something extra I need to do in order to reRender the form?


      Another peculiar thing, I can have two fields bound to the same bean property, and have one re-render the other, the functionality only breaks on rerendering the field where the ajax call is resulting from.


      In other words:


      <h:inputText
      value="#{memberExample.identifier}" id="referrerIdentifierField2">
           <a:support event="onblur" reRender="repeater,referrerIdentifierField2" limitToList="true"
           bypassUpdates="false" />
      </h:inputText>
      
      <h:inputText value="#{memberExample.identifier}" id="referrerIdentifierField">
           <a:support event="onblur" reRender="repeater,referrerIdentifierField2" limitToList="true"
           bypassUpdates="false"/>
      </h:inputText>
      
      <h:outputText id="repeater" value="#{memberExample.communityIdentifier}"/>



      using that the first field will not update the model, but the second will.




      -C