PrimeFaces在GlassFish 3.1.2.2上推动大气

PrimeFaces 3.4在三天前问世。 除了通常令人敬畏的新组件和更新组件之外,它还包括新的PrimeFaces Push框架。 基于Atmosphere,这为您的应用程序提供了简单的推送机制。 这是在最新的GlassFish 3.1.2.2上配置和运行它的方法。

准备工作

像往常一样,您应该安装一些JavaMavenGlassFish 。 如果您单手需要它,请尝试使用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 PushJava企业软件开发博客上。


翻译自: https://www.javacodegeeks.com/2012/09/primefaces-push-with-atmosphere-on.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值