推送EventBus Primefaces无效

时间:2014-11-19 20:18:04

标签: primefaces push

这个Primefaces中的推送通知示例不起作用。消息未显示

观点:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    template="/WEB-INF/templates/main_template.xhtml">
    <ui:define name="bodyContent">
        <p:growl widgetVar="growl" showDetail="true" />
        <h:form>
            <p:panel header="Growl">
                <h:panelGrid columns="2">
                    <p:outputLabel for="summary" value="Summary: " />
                    <p:inputText id="summary" value="#{growlBean.summary}"
                        required="true" />
                    <p:outputLabel for="detail" value="Detail: " />
                    <p:inputText id="detail" value="#{growlBean.detail}"
                        required="true" />
                </h:panelGrid>
                <p:commandButton value="Send" actionListener="#{growlBean.send}" />
            </p:panel>
        </h:form>
    </ui:define>

    <p:socket onMessage="handleMessage" channel="/notify" />

    <script type="text/javascript">
        function handleMessage(facesmessage) {
            facesmessage.severity = 'info';

            PF('growl').show([facesmessage]);
        }
    </script>
</ui:composition>

的web.xml:

<servlet>
    <servlet-name>Push Servlet</servlet-name>
    <servlet-class>org.primefaces.push.PushServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Push Servlet</servlet-name>
    <url-pattern>/primepush/*</url-pattern>
</servlet-mapping>

支持bean:

package co.com.test.primefacespush.managedbean;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;

import org.primefaces.push.EventBus;
import org.primefaces.push.EventBusFactory;

@ManagedBean
@ApplicationScoped
public class GrowlBean {

    private final static String CHANNEL = "/notify";

    private String text, summary, detail;

    public void send() {
        EventBus eventBus = EventBusFactory.getDefault().eventBus();
        eventBus.publish(CHANNEL, new FacesMessage(summary, detail));
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public String getSummary() {
        return summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }

    public String getDetail() {
        return detail;
    }

    public void setDetail(String detail) {
        this.detail = detail;
    }
}

PushEndpoint:

package co.com.test.primefacespush.managedbean;

import javax.faces.application.FacesMessage;
import org.primefaces.push.annotation.OnMessage;
import org.primefaces.push.annotation.PushEndpoint;
import org.primefaces.push.impl.JSONEncoder;

@PushEndpoint("/notify")
public class NotifyResource {

    @OnMessage(encoders = { JSONEncoder.class })
    public FacesMessage onMessage(FacesMessage message) {
        return message;
    }
}

有什么问题?我看不到它。我在浏览器控制台中没有JBoss控制台中的错误

框架:

Shiro 1.2.3
Mojarra 2.1.7
Primefaces 5.1
JDK 1.7
JBoss 7.1.1

1 个答案:

答案 0 :(得分:0)

很抱歉迟到了回复。 如何在JBoss上部署应用程序? 我们遇到了一个问题,即我们在Tomcat上部署的war文件具有.jar依赖关系以及PUSH功能的代码。 我们注意到类似的问题,无论我们尝试什么,onMessage都没有调用。

经过几天领先的GUI架构师调查后,我们发现大气开发人员包含了一个错误(他们正在加载带有@Pushendpoint的.class文件和getResource()而不是getResourceAsStream(),因此类加载器无法找到它明显。

我们的解决方案是用maven覆盖jar .class fiels并手动将它们复制到war文件中(将推送端点生成的.class文件从.jar文件夹移动到war生成的.class文件夹)。有什么结果?