[
https://issues.jboss.org/browse/RF-13592?page=com.atlassian.jira.plugin.s...
]
Brian Leathem commented on RF-13592:
------------------------------------
The issue is that the _lastMessageNumber_ in the _RichFaces.Push_ closure is set on page
load, and is not reset on ajax load. After ajax render the _message.number_ is compared
to the _lastMessageNumber_, and the message is ignored if the number is too small. This
can be seen in the attached sample as follows:
1) load the page
2) enable push
3) click send message X times
4) disable push
5) enable push
4) push send message X+1 times
The message will not be displayed until the X+1st click.
Resolution will involve resetting the _lastMessageNumber_ when the push component is
destroyed.
a4j:push doesn't work after rendering
-------------------------------------
Key: RF-13592
URL:
https://issues.jboss.org/browse/RF-13592
Project: RichFaces
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: component-push/poll
Affects Versions: 4.3.5
Environment: JBoss EAP 6.2
Browser: Chrome 33.0.1750.154 and IE 8.0.7601.17514
JSF 2.19, Richfaces 4.3.5
Reporter: Igor Bolshakov
Priority: Critical
Labels: gss
Fix For: 4.3.7
Attachments: a4j.log, localhost.har, push-test.zip, push-test.zip,
screenshot.png, web.xml
Original Estimate: 4 hours
Remaining Estimate: 4 hours
I use {{rendered}} attribute to start/stop a4j:push component in example below. After
rendering of a4j:push element the handling of incoming push messages is broken. In my
simple example I set alert to notify about recieved message (see attached screenshot).
View xhtml code:
{code:xml}<?xml version="1.0" encoding="ISO-8859-1"?>
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:form>
<a4j:outputPanel id="push-panel">
<a4j:push address="TEST_ADDRESS"
ondataavailable="alert('event.rf.data=' + event.rf.data)"
rendered="#{testBean.enabled}"/>
</a4j:outputPanel>
<a4j:commandButton id="startBtn" value="Start Push"
action="#{testBean.startPush}" render="push-panel"/>
<a4j:commandButton id="stopBtn" value="Stop Push"
action="#{testBean.stopPush}" render="push-panel"/>
<a4j:commandButton id="sendMessage" value="Send Message"
action="#{testBean.sendMessage}"/>
</h:form>
</ui:composition>{code}
Backing bean class:
{code}public class TestBean {
private boolean enabled = false;
public boolean isEnabled() {
return enabled;
}
public void startPush() {
enabled = true;
}
public void stopPush() {
enabled = false;
}
public void sendMessage() throws MessageException {
TopicsContext.lookup().publish(new TopicKey("TEST_ADDRESS"),
"Hello World");
}
}{code}
Configuration in web.xml (see attachment).
Scenario:
1) Open page
2) Click "Start Push" button
3) Click "Send Message" button
4) Alert "event.rf.data=Hello World" is shown (see attached screenshot)
5) Click "Stop Push" button
6) Polling is closed (see localhost.har in attachment)
7) Click "Start Push" button
8) Polling is started (see localhost.har in attachment)
9) Click "Send Message" button
10) Message is recieved (see localhost.har in attachment)
11) No alert, no javascript error
For more details I saved a4j:log output in a4j.log file.
--
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