[ 
https://issues.jboss.org/browse/RF-13567?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12950902#comment-12950902
 ] 

Lukáš Fryč edited comment on RF-13567 at 3/6/14 4:52 PM:
---------------------------------------------------------

The details you have shared are about JSF event handling:
* onevent callback with either begin, complete or success
* onerror callback

but RichFaces extends this concept with:
* onbeforedomupdate (mapped to JSF's onevent('complete'))
* oncomplete (mapped to JSF's onevent('success'))

see the actual mapping here: 
legend: {{onevent('complete') -> onbeforedomupdate}}
{code}
 var jsfEventsAdapterEventNames = {
        event: {
            'begin': ['begin'],
            'complete': ['beforedomupdate'],
            'success': ['success', 'complete']
        },
        error: ['error', 'complete']
    };
{code}
https://github.com/richfaces/richfaces/blob/2d6e657136e409f67d837a7a30551bd84daba8cf/framework/src/main/resources/META-INF/resources/org.richfaces/richfaces.js#L383

RichFaces JavaScriptService fires oncomplete, which means JSF's 
onevent('success'), which means "Occurs immediately after jsf.ajax.response has 
completed."
                
      was (Author: lfryc):
    The details you have shared are about JSF event handling:
* onevent callback with either begin, complete or success
* onerror callback

but RichFaces extends this concept with:
* onbeforedomupdate (mapped to JSF's onevent('complete'))
* oncomplete (mapped to JSF's onevent('success'))

see the actual mapping here: 
legend: {{onevent('complete') -> onbeforedomupdate}}
{code}
 var jsfEventsAdapterEventNames = {
        event: {
            'begin': ['begin'],
            'complete': ['beforedomupdate'],
            'success': ['success', 'complete']
        },
        error: ['error', 'complete']
    };
{code}
https://github.com/richfaces/richfaces/blob/master/framework/src/main/resources/META-INF/resources/org.richfaces/richfaces.js#L383

RichFaces JavaScriptService fires oncomplete, which means JSF's 
onevent('success'), which means "Occurs immediately after jsf.ajax.response has 
completed."
                  
> JavaScriptService executes javascript before the complete event
> ---------------------------------------------------------------
>
>                 Key: RF-13567
>                 URL: https://issues.jboss.org/browse/RF-13567
>             Project: RichFaces
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>            Reporter: Brian Leathem
>
> Using the javascript service to execute jQuery plugins ends up with the 
> plugin being executed before the new elements are placed in the DOM.  This 
> results in stale element references during subsequent plugin execution.
> Console log with r:log enabled:
> {code}
> RichFaces: New request added to queue. Queue requestGroupingId changed to 
> form1:richTable:0:collapsibleSubTable log.js:195
> RichFaces: Queue will wait 0ms before submit log.js:195
> RichFaces: richfaces.queue: will submit request NOW log.js:195
> RichFaces: Received 'begin' event from <tbody 
> id=form1:richTable:0:collapsibleSubTable class=rf-cst ...> log.js:195
> Destroy called for sub-table-bridge of element: 
> form1:richTable:0:collapsibleSubTable sub-table-bridge.js:89
> Destroy called for sub-table of element: 
> form1:richTable:0:collapsibleSubTable sub-table.js:71
> RichFaces: Received 'beforedomupdate' event from <tbody 
> id=form1:richTable:0:collapsibleSubTable class=rf-cst ...> log.js:195
> RichFaces: <span>Server returned responseText: </span><span 
> class="rf-log-entry-msg-xml">&lt;partial-response 
> id="j_id1"&gt;&lt;changes&gt;&lt;update 
> id="form1:richTable:0:collapsibleSubTable"&gt;&lt;![CDATA[&lt;tbody 
> id="form1:richTable:0:collapsibleSubTable" class="rf-cst"&gt;&lt;tr 
> id="form1:richTable:0:collapsibleSubTable:f" class="rf-cst-ftr"&gt;&lt;td 
> class="rf-cst-ftr-c" colspan="3"&gt;footer&lt;ul class="data-scroller " 
> id="form1:richTable:0:collapsibleSubTable:subscroller"&gt;&lt;li&gt;&lt;a 
> class="rf-ds-btn rf-ds-btn-first rf-ds-dis" 
> id="form1:richTable:0:collapsibleSubTable:subscroller_ds_f"&gt;««««&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a
>  class="rf-ds-btn rf-ds-btn-fastrwd rf-ds-dis" 
> id="form1:richTable:0:collapsibleSubTable:subscroller_ds_fr"&gt;««&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a
>  class="rf-ds-btn rf-ds-btn-prev rf-ds-dis" 
> id="form1:richTable:0:collapsibleSubTable:subscroller_ds_prev"&gt;«&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a
>  class="rf-ds-btn rf-ds-btn-next rf-ds-dis" 
> id="form1:richTable:0:collapsibleSubTable:subscroller_ds_next"&gt;»&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a
>  class="rf-ds-btn rf-ds-btn-fastfwd rf-ds-dis" 
> id="form1:richTable:0:collapsibleSubTable:subscroller_ds_ff"&gt;»»&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a
>  class="rf-ds-btn rf-ds-btn-last rf-ds-dis" 
> id="form1:richTable:0:collapsibleSubTable:subscroller_ds_l"&gt;»»»»&lt;/a&gt;&lt;/li&gt;&lt;script
>  type="text/javascript"&gt;new 
> RichFaces.ui.DataScroller("form1:richTable:0:collapsibleSubTable:subscroller",function(event,element,data){RichFaces.ajax("form1:richTable:0:collapsibleSubTable:subscroller",event,{"parameters":{"form1:richTable:0:collapsibleSubTable:subscroller:page":data.page}
>  ,"incId":"1"} )},{"digitals":{} ,"buttons":{} ,"currentPage":1} 
> )&lt;/script&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr 
> id="form1:richTable:0:collapsibleSubTable:sc" style="display: 
> none;"&gt;&lt;td&gt;&lt;input 
> id="form1:richTable:0:collapsibleSubTable:state" 
> name="form1:richTable:0:collapsibleSubTable:state" type="hidden" value="0" 
> /&gt;&lt;input id="form1:richTable:0:collapsibleSubTable:options" 
> name="form1:richTable:0:collapsibleSubTable:options" type="hidden" 
> /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;]]&gt;&lt;/update&gt;&lt;update 
> id="j_id1:javax.faces.ViewState:0"&gt;&lt;![CDATA[-7868019542578483246:-4058924891838140372]]&gt;&lt;/update&gt;&lt;extension
>  
> id="org.richfaces.extension"&gt;&lt;complete&gt;RichFaces.jQuery(document.getElementById('form1:richTable:0:collapsibleSubTable')).subTableBridge({"optionsInput":"form1:richTable:0:collapsibleSubTable:options","formId":"form1","expandMode":"ajax","stateInput":"form1:richTable:0:collapsibleSubTable:state","eventOptions":{"incId":"1"}
>  } 
> );RichFaces.javascriptServiceComplete();;&lt;/complete&gt;&lt;render&gt;form1:richTable:0:collapsibleSubTable@body
>  
> &lt;/render&gt;&lt;/extension&gt;&lt;/changes&gt;&lt;/partial-response&gt;</span>
>  log.js:195
> RichFaces: <span>Listing content of response <b>changes</b> 
> element:<br>Element <b>update</b> for 
> id=form1:richTable:0:collapsibleSubTable<br><span 
> class="rf-log-entry-msg-xml">&lt;update 
> id="form1:richTable:0:collapsibleSubTable"&gt;&lt;![CDATA[&lt;tbody 
> id="form1:richTable:0:collapsibleSubTable" class="rf-cst"&gt;&lt;tr 
> id="form1:richTable:0:collapsibleSubTable:f" class="rf-cst-ftr"&gt;&lt;td 
> class="rf-cst-ftr-c" colspan="3"&gt;footer&lt;ul class="data-scroller " 
> id="form1:richTable:0:collapsibleSubTable:subscroller"&gt;&lt;li&gt;&lt;a 
> class="rf-ds-btn rf-ds-btn-first rf-ds-dis" 
> id="form1:richTable:0:collapsibleSubTable:subscroller_ds_f"&gt;««««&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a
>  class="rf-ds-btn rf-ds-btn-fastrwd rf-ds-dis" 
> id="form1:richTable:0:collapsibleSubTable:subscroller_ds_fr"&gt;««&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a
>  class="rf-ds-btn rf-ds-btn-prev rf-ds-dis" 
> id="form1:richTable:0:collapsibleSubTable:subscroller_ds_prev"&gt;«&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a
>  class="rf-ds-btn rf-ds-btn-next rf-ds-dis" 
> id="form1:richTable:0:collapsibleSubTable:subscroller_ds_next"&gt;»&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a
>  class="rf-ds-btn rf-ds-btn-fastfwd rf-ds-dis" 
> id="form1:richTable:0:collapsibleSubTable:subscroller_ds_ff"&gt;»»&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a
>  class="rf-ds-btn rf-ds-btn-last rf-ds-dis" 
> id="form1:richTable:0:collapsibleSubTable:subscroller_ds_l"&gt;»»»»&lt;/a&gt;&lt;/li&gt;&lt;script
>  type="text/javascript"&gt;new 
> RichFaces.ui.DataScroller("form1:richTable:0:collapsibleSubTable:subscroller",function(event,element,data){RichFaces.ajax("form1:richTable:0:collapsibleSubTable:subscroller",event,{"parameters":{"form1:richTable:0:collapsibleSubTable:subscroller:page":data.page}
>  ,"incId":"1"} )},{"digitals":{} ,"buttons":{} ,"currentPage":1} 
> )&lt;/script&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr 
> id="form1:richTable:0:collapsibleSubTable:sc" style="display: 
> none;"&gt;&lt;td&gt;&lt;input 
> id="form1:richTable:0:collapsibleSubTable:state" 
> name="form1:richTable:0:collapsibleSubTable:state" type="hidden" value="0" 
> /&gt;&lt;input id="form1:richTable:0:collapsibleSubTable:options" 
> name="form1:richTable:0:collapsibleSubTable:options" type="hidden" 
> /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;]]&gt;&lt;/update&gt;</span><br>Element
>  <b>update</b> for id=j_id1:javax.faces.ViewState:0<br><span 
> class="rf-log-entry-msg-xml">&lt;update 
> id="j_id1:javax.faces.ViewState:0"&gt;&lt;![CDATA[-7868019542578483246:-4058924891838140372]]&gt;&lt;/update&gt;</span><br>Element
>  <b>extension</b> for id=org.richfaces.extension<br><span 
> class="rf-log-entry-msg-xml">&lt;extension 
> id="org.richfaces.extension"&gt;&lt;complete&gt;RichFaces.jQuery(document.getElementById('form1:richTable:0:collapsibleSubTable')).subTableBridge({"optionsInput":"form1:richTable:0:collapsibleSubTable:options","formId":"form1","expandMode":"ajax","stateInput":"form1:richTable:0:collapsibleSubTable:state","eventOptions":{"incId":"1"}
>  } 
> );RichFaces.javascriptServiceComplete();;&lt;/complete&gt;&lt;render&gt;form1:richTable:0:collapsibleSubTable@body
>  &lt;/render&gt;&lt;/extension&gt;</span><br></span> log.js:195
> Create called for sub-table-bridge of element: 
> form1:richTable:0:collapsibleSubTable sub-table-bridge.js:42
> Create called for sub-table of element: form1:richTable:0:collapsibleSubTable 
> sub-table.js:22
> RichFaces: richfaces.queue: ajax submit successfull log.js:195
> RichFaces: richfaces.queue: Nothing to submit log.js:195
> RichFaces: Received 'success' event from <tbody 
> id=form1:richTable:0:collapsibleSubTable class=rf-cst ...> log.js:195
> RichFaces: Received 'complete' event from <tbody 
> id=form1:richTable:0:collapsibleSubTable class=rf-cst ...> log.js:195
> {code}
> Note the "create" debug statements called from the plugin _create methods 
> occur before we get to the complete event.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

_______________________________________________
richfaces-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/richfaces-issues

Reply via email to