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
Assignee: Brian Leathem
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.