2013-04-22 54 views
2

我正試圖在我的項目中實現主推計數器。我正在使用PrimeFaces3.5,Jboss7.0和Eclipse Indigo版本。PrimePush計數器實現

  1. 氣氛的註解-1.0.1.jar
  2. 大氣COMPAT-jbossweb-1.0.1.jar
  3. 大氣COMPAT-tomcat的:

    與黃金推我已經加入罐-1.0.1.jar

  4. 氣氛-COMPAT-tomcat7-1.0.1.jar
  5. 氣氛-運行時1.0.1.jar
  6. primefaces-3.5.jar和JSF和SLF4J罐子

我的XHTML代碼:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui"> 
<h:head></h:head> 
<h:body> 
    <h:form id="form"> 
     <h:outputText id="out" value="#{pushBean.count}" /> 
     <p:commandButton value="Click" actionListener="#{pushBean.increment}" /> 
    </h:form> 
    <p:socket onMessage="handleMessage" channel="/counter" /> 
    <script type="text/javascript"> 
     function handleMessage(data) { 
      $('.display').html(data); 
     } 
    </script> 
</h:body> 
</html> 

我管理的bean:

@ManagedBean(name = "pushBean") 
@ApplicationScoped 
public class PushBean { 

    public PushBean() { 
    } 

    private int count; 

    public int getCount() { 
     return this.count; 
    } 

    public void setCount(final int count) { 
     this.count = count; 
    } 

    public synchronized void increment() { 
     this.count++; 
     PushContext pushContext = PushContextFactory.getDefault().getPushContext(); 
     pushContext.push("/counter", String.valueOf(this.count)); 
    } 

} 

當我點擊界面中的按鈕,計數器加在服務器上,但它並沒有反映在UI自動,因爲它沒有更新。但是當我刷新頁面時,計數會按預期遞增。


例外,我得到的是:

13:00:02,298 ERROR [stderr] (http--0.0.0.0-8080-5) [http--0.0.0.0-8080-5] ERROR org.atmosphere.cpr.AtmosphereFramework - AtmosphereFramework exception 

13:00:02,298 ERROR [stderr] (http--0.0.0.0-8080-5) java.lang.IllegalStateException: The servlet or filters that are being used by this request do not support async operation 
+0

你沒有提到你設置推送的Servlet就像[primefaces用戶指南中介紹](http://primefaces.googlecode.com/files/indexed_primefaces_users_guide_3_5.pdf) - 第5章。你配置了它嗎? – Jens 2013-04-22 07:13:52

+0

是延,我在web.xml 推的Servlet org.primefaces.push.PushServlet 推的Servlet /primepush/* 2013-04-22 07:30:44

+2

您嘗試在web.xml中配置: Push Servlet org.primefaces.push.PushServlet true 2013-04-22 07:56:50

回答

2

當你的Web應用程序的Servlet中3升兼容的容器運行此異常情況發生。正確的web.xml中必須有異步支持的元素設置爲true,例如:

<servlet> 
     <servlet-name>Push Servlet</servlet-name> 
     <servlet-class>org.primefaces.push.PushServlet</servlet-class> 
     <async-supported>true</async-supported> 
    </servlet> 

參考:Installing Atmosphere

+0

工作對我來說,謝謝。 – 2013-04-22 08:36:25

0

我不是很肯定推框架,但我認爲這個問題是你的JavaScript。 您正在嘗試刷新「.display」控件,但沒有像.display那樣的東西。

嘗試「.OUT」代替。顯示

+0

我改變了代碼使用Ajax更新,而不是JavaScript ...即使那麼相同的結果...的 \t \t的 \t \t \t \t \t \t \t – 2013-04-22 07:25:44