这个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
答案 0 :(得分:0)
很抱歉迟到了回复。 如何在JBoss上部署应用程序? 我们遇到了一个问题,即我们在Tomcat上部署的war文件具有.jar依赖关系以及PUSH功能的代码。 我们注意到类似的问题,无论我们尝试什么,onMessage都没有调用。
经过几天领先的GUI架构师调查后,我们发现大气开发人员包含了一个错误(他们正在加载带有@Pushendpoint的.class文件和getResource()而不是getResourceAsStream(),因此类加载器无法找到它明显。
我们的解决方案是用maven覆盖jar .class fiels并手动将它们复制到war文件中(将推送端点生成的.class文件从.jar文件夹移动到war生成的.class文件夹)。有什么结果?