Details
-
Type: Bug
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 1.8.2
-
Fix Version/s: 1.8.3, 1.8.2-EE-GA_P02, 2.0.0
-
Component/s: Framework
-
Labels:None
-
Environment:Linux
Java 1.6.0_18
Description
Our web application receives async events from our external application server that directs the web application to display something new. For example, an event is sent to the web server environment to display a certain object in a page, or display a tab within a page, or focus on a specific field on a page. To implement this, we use Server push to update the page in the browser, and often we use javascript calls (via the JavascriptContext.addJavascriptCall method) to execute this. Typically, we use the renderLater() method on the PersistentFacesContext to initiate the server push.
We can get multiple async events at once from our server. We've noticed cases where multiple events were being applied to the PersistentFacesState before it had a chance to send the updates to the browser. In these cases, the UpdateElements were combining the changes (as expected).
What we noticed was if two or more commands were coalesced together, and both commands had different Javascript commands, only the last one was sent to the browser. The coalesce command overwrote any existing Javascript command with the last one in. This is causing us problems, as many of the subsequent events rely on the previous events being sent.
We can get multiple async events at once from our server. We've noticed cases where multiple events were being applied to the PersistentFacesState before it had a chance to send the updates to the browser. In these cases, the UpdateElements were combining the changes (as expected).
What we noticed was if two or more commands were coalesced together, and both commands had different Javascript commands, only the last one was sent to the browser. The coalesce command overwrote any existing Javascript command with the last one in. This is causing us problems, as many of the subsequent events rely on the previous events being sent.
Patch that changes the UpdateElements so that any JavaScript calls being coalesced will be added to previous javascript calls instead of replacing. Created against 1.8.2 open source code.