]
Lukáš Fryč edited comment on RF-13567 at 3/6/14 4:52 AM:
---------------------------------------------------------
Brian, I don't think this is incorrect behavior unless I miss something.
* onbeforedomupdate is called
* DOM is updated by JSF
** note: this step may execute <script>s included in the response (not completely
sure when it is evaluated)
* javascriptService is called on before complete event
* oncomplete is called
So the elements should be placed in the DOM already when DOM is updated. ^
Is it not possible that JSF DOM update causes to add a <script> with jQuery plugin
execution and it is this script execution that adds elements you expect to be present
already?
----
Note: the oncomplete event serves as notification for the user to know that every
synchronous update of the page caused by partial response was processed. There should be
no RichFaces specific logic following the execution of oncomplete event.
was (Author: lfryc):
Brian, I don't think this is incorrect behavior unless I miss something.
* onbeforedomupdate is called
* DOM is updated by JSF
* javascriptService is called on before complete event
* oncomplete is called
So the elements should be placed in the DOM already when DOM is updated. ^
Is it not possible that JSF DOM update causes to add a <script> with jQuery plugin
execution and it is this script execution that adds elements you expect to be present
already?
----
Note: the oncomplete event serves as notification for the user to know that every
synchronous update of the page caused by partial response was processed. There should be
no RichFaces specific logic following the execution of oncomplete event.
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"><partial-response
id="j_id1"><changes><update
id="form1:richTable:0:collapsibleSubTable"><![CDATA[<tbody
id="form1:richTable:0:collapsibleSubTable"
class="rf-cst"><tr
id="form1:richTable:0:collapsibleSubTable:f"
class="rf-cst-ftr"><td class="rf-cst-ftr-c"
colspan="3">footer<ul class="data-scroller "
id="form1:richTable:0:collapsibleSubTable:subscroller"><li><a
class="rf-ds-btn rf-ds-btn-first rf-ds-dis"
id="form1:richTable:0:collapsibleSubTable:subscroller_ds_f">««««</a></li><li><a
class="rf-ds-btn rf-ds-btn-fastrwd rf-ds-dis"
id="form1:richTable:0:collapsibleSubTable:subscroller_ds_fr">««</a></li><li><a
class="rf-ds-btn rf-ds-btn-prev rf-ds-dis"
id="form1:richTable:0:collapsibleSubTable:subscroller_ds_prev">«</a></li><li><a
class="rf-ds-btn rf-ds-btn-next rf-ds-dis"
id="form1:richTable:0:collapsibleSubTable:subscroller_ds_next">»</a></li><li><a
class="rf-ds-btn rf-ds-btn-fastfwd rf-ds-dis"
id="form1:richTable:0:collapsibleSubTable:subscroller_ds_ff">»»</a></li><li><a
class="rf-ds-btn rf-ds-btn-last rf-ds-dis"
id="form1:richTable:0:collapsibleSubTable:subscroller_ds_l">»»»»</a></li><script
type="text/javascript">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}
)</script></ul></td></tr><tr
id="form1:richTable:0:collapsibleSubTable:sc" style="display:
none;"><td><input
id="form1:richTable:0:collapsibleSubTable:state"
name="form1:richTable:0:collapsibleSubTable:state" type="hidden"
value="0" /><input
id="form1:richTable:0:collapsibleSubTable:options"
name="form1:richTable:0:collapsibleSubTable:options" type="hidden"
/></td></tr></tbody>]]></update><update
id="j_id1:javax.faces.ViewState:0"><![CDATA[-7868019542578483246:-4058924891838140372]]></update><extension
id="org.richfaces.extension"><complete>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();;</complete><render>form1:richTable:0:collapsibleSubTable@body
</render></extension></changes></partial-response></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"><update
id="form1:richTable:0:collapsibleSubTable"><![CDATA[<tbody
id="form1:richTable:0:collapsibleSubTable"
class="rf-cst"><tr
id="form1:richTable:0:collapsibleSubTable:f"
class="rf-cst-ftr"><td class="rf-cst-ftr-c"
colspan="3">footer<ul class="data-scroller "
id="form1:richTable:0:collapsibleSubTable:subscroller"><li><a
class="rf-ds-btn rf-ds-btn-first rf-ds-dis"
id="form1:richTable:0:collapsibleSubTable:subscroller_ds_f">««««</a></li><li><a
class="rf-ds-btn rf-ds-btn-fastrwd rf-ds-dis"
id="form1:richTable:0:collapsibleSubTable:subscroller_ds_fr">««</a></li><li><a
class="rf-ds-btn rf-ds-btn-prev rf-ds-dis"
id="form1:richTable:0:collapsibleSubTable:subscroller_ds_prev">«</a></li><li><a
class="rf-ds-btn rf-ds-btn-next rf-ds-dis"
id="form1:richTable:0:collapsibleSubTable:subscroller_ds_next">»</a></li><li><a
class="rf-ds-btn rf-ds-btn-fastfwd rf-ds-dis"
id="form1:richTable:0:collapsibleSubTable:subscroller_ds_ff">»»</a></li><li><a
class="rf-ds-btn rf-ds-btn-last rf-ds-dis"
id="form1:richTable:0:collapsibleSubTable:subscroller_ds_l">»»»»</a></li><script
type="text/javascript">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}
)</script></ul></td></tr><tr
id="form1:richTable:0:collapsibleSubTable:sc" style="display:
none;"><td><input
id="form1:richTable:0:collapsibleSubTable:state"
name="form1:richTable:0:collapsibleSubTable:state" type="hidden"
value="0" /><input
id="form1:richTable:0:collapsibleSubTable:options"
name="form1:richTable:0:collapsibleSubTable:options" type="hidden"
/></td></tr></tbody>]]></update></span><br>Element
<b>update</b> for id=j_id1:javax.faces.ViewState:0<br><span
class="rf-log-entry-msg-xml"><update
id="j_id1:javax.faces.ViewState:0"><![CDATA[-7868019542578483246:-4058924891838140372]]></update></span><br>Element
<b>extension</b> for id=org.richfaces.extension<br><span
class="rf-log-entry-msg-xml"><extension
id="org.richfaces.extension"><complete>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();;</complete><render>form1:richTable:0:collapsibleSubTable@body
</render></extension></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: