準備工作

像往常一樣,您應該安裝一些Java , Maven和GlassFish 。 如果您單手需要它,請嘗試使用NetBeans 7.2 。 它是最新的,也是最出色的,并附帶了此示例所需的所有內容。 將零件或整體安裝到您選擇的位置,然后開始創建新的GlassFish域:
asadmin create-domain pf_push
接受默認值并啟動您的域
asadmin start-domain pf_push
現在,您必須為您的域啟用Comet支持 。 通過使用http:// <host>:4848 / admin ui或以下命令來執行此操作:
asadmin set server-config.network-config.protocols.protocol.http-1.http.comet-support-enabled='true'
這就是您配置域所要做的全部。
Maven項目設置
現在切換到IDE并創建一個新的基于Maven的Java EE 6項目。 將primefaces存儲庫添加到<repositories>部分,并將primefaces依賴項添加到您的項目<dependencies>部分或項目的pom.xml:
<repository><url>http://repository.primefaces.org/</url><id>primefaces</id><layout>default</layout><name>Repository for library PrimeFaces 3.2</name></repository><dependency><groupId>org.primefaces</groupId><artifactId>primefaces</artifactId><version>3.4</version></dependency>
此外,我們還需要最新的Atmosphere依賴項(此版本與JeanFrancois Arcand相對 )
<dependency><groupId>org.atmosphere</groupId><artifactId>atmosphere-runtime</artifactId><version>1.0.0</version>
</dependency>
它使用的是Log4j,如果需要更多輸出,最好還包括相應的配置或使用slf4j將其橋接到JUL。 要稍后做,只需在pom.xml中添加以下內容:
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.6.6</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-jdk14</artifactId><version>1.6.6</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>log4j-over-slf4j</artifactId><version>1.6.6</version></dependency>
只剩下一件事要做。 PrimePush組件需要注冊其Servlet通道。 因此,打開您的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>
就是這樣! 上代碼!
編碼
我將使用PrimeFaces用戶指南中提到的示例。 一個非常簡單的示例,它具有可以遞增的全局計數器。
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.push.PushContext;
import org.primefaces.push.PushContextFactory;/*** Counter is a global counter where each button click increments the count* value and new value is pushed to all subscribers.** @author eiselem*/
@ManagedBean
@SessionScoped
public class GlobalCounterBean implements Serializable {private int count;public int getCount() {return count;}public void setCount(int count) {this.count = count;}public synchronized void increment() {count++;PushContext pushContext = PushContextFactory.getDefault().getPushContext(;pushContext.push('/counter', String.valueOf(count));}
}
PushContext包含整個魔術。 它主要用于發布和計劃消息以及管理偵聽器等。 從您的方面調用它。 這看起來很簡單和熟悉:
<h:form id='counter'>
<h:outputText id='out' value='#{globalCounterBean.count}' styleClass='display' />
<p:commandButton value='Click' actionListener='#{globalCounterBean.increment}' />
</h:form>
除了增加計數器,這基本上不執行任何操作。 因此,您必須添加一些更多的魔術來連接到推式通道。 在表單下方添加以下內容:
<p:socket channel='/counter' >
<p:ajax event='message' update='counter:out' />
</p:socket>
<p:socket />是PrimeFaces組件,用于處理服務器和瀏覽器之間的連接。 它通過定義通信通道和回調來處理廣播。 包含的<p:ajax />組件偵聽消息事件并更新表單中的counter字段。 但是,這需要進行額外的服務器往返。 您還可以通過使用一些Java腳本并將onMessage屬性綁定到它來更新輸出字段,從而簡化此操作:
<script type='text/javascript'>
function handleMessage(data) {
$('.display').html(data);
}
</script>
<p:socket onMessage='handleMessage' channel='/counter' />
到此為止。 祝賀您的第一個PrimeFaces Push示例。
祝您編程愉快,別忘了分享!
參考:來自JCG合作伙伴 Markus Eisele在GlassFish 3.1.2.2上的帶有大氣的PrimeFaces Push在Java企業軟件開發博客上。
翻譯自: https://www.javacodegeeks.com/2012/09/primefaces-push-with-atmosphere-on.html