2012-01-16 26 views
2

是否有人在我的环境中使用a4j:push标签功能?Richfaces 4.1和a4j:推送:如何让它工作?

  • RichFaces的4.1决赛
  • MyFaces的2.1.5
  • 气氛0.83
  • 的Tomcat 7.0.23

任何建议都非常欢迎。

感谢, 米洛的van der Zee的

这是我的测试:

的web.xml(编辑:固定):

... 
<!-- Richfaces push servlet --> 
<context-param> 
    <param-name>org.richfaces.push.jms.disable</param-name> 
    <param-value>true</param-value> 
</context-param> 
<context-param> 
    <param-name>org.atmosphere.useBlocking</param-name> 
    <param-value>true</param-value> 
</context-param> 
<filter> 
    <filter-name>PushFilter</filter-name> 
    <filter-class>org.richfaces.webapp.PushFilter</filter-class> 
    <async-supported>true</async-supported> 
</filter> 
<filter-mapping> 
    <filter-name>PushFilter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 
<context-param> 
    <param-name>org.richfaces.push.handlerMapping</param-name> 
    <param-value>/__richfaces_push</param-value> 
</context-param> 
<servlet> 
    <servlet-name>Push Servlet</servlet-name> 
    <servlet-class>org.richfaces.webapp.PushServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Push Servlet</servlet-name> 
    <url-pattern>/__richfaces_push</url-pattern> 
</servlet-mapping> 
... 

TestPushBean.java:

package com.vetmanager.base.test; 

import java.text.SimpleDateFormat; 
import java.util.Calendar; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 

import org.apache.log4j.Logger; 
import org.richfaces.application.push.MessageException; 
import org.richfaces.application.push.TopicKey; 
import org.richfaces.application.push.TopicsContext; 

/** 
* 
*/ 
@ManagedBean 
@SessionScoped 
public class TestPushBean { 
    private static final Logger LOGGER = Logger.getLogger(TestPushBean.class.getName()); 

    private static final TopicKey TOPIC_KEY = new TopicKey("push"); 

    /** 
    * Constructor init's the topic. 
    */ 
    public TestPushBean() { 
     LOGGER.debug("TestPushBean"); 

     TopicsContext topicsContext = TopicsContext.lookup(); 
     topicsContext.getOrCreateTopic(TOPIC_KEY); 
    } 

    /** 
    * @return String 
    */ 
    public String getNow() { 
     LOGGER.debug("getNow"); 

     Calendar now = Calendar.getInstance(); 
     SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MMM-yyyy/HH:mm:ss"); 
     return dateFormatter.format(now.getTime()); 
    } 

    /** 
    * 
    */ 
    public void push() { 
     LOGGER.debug("push"); 

     TopicsContext topicsContext = TopicsContext.lookup(); 
     try { 
      topicsContext.publish(TOPIC_KEY, "Test String"); 
     } catch (MessageException e) { 
      LOGGER.error("push: " + e, e); 
     } 
    } 
} 

和: test.xhtml:

<!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:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:a4j="http://richfaces.org/a4j" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:rich="http://richfaces.org/rich" 
    xmlns:fn="http://java.sun.com/jsp/jstl/functions" 
    xmlns:c="http://java.sun.com/jsp/jstl/core" 
> 

<h:head> 
</h:head> 

<h:body> 
    <h:form> 
     <a4j:push id="push" address="push" onerror="alert(event.rf.data)"> 
      <a4j:ajax event="dataavailable" render="now" execute="@none"/> 
     </a4j:push> 

     Tijd: <h:outputText id="now" value="#{testPushBean.now}"/><br/> 

     <a4j:commandButton value="event" actionListener="#{testPushBean.push()}"/> 
    </h:form> 
</h:body> 

</html> 

回答

2

该论坛的帖子可能是从别人谁正在使用的Servlet API 2.5 (当您使用的web.xml的版本也问题= 2.5)有用:

https://community.jboss.org/message/647015#647015

顺便说一下您的具体问题可能是:

使用Atmosphere 0.8.0-RC1与RichFaces 4.1.0.Final,因为Atmosphere 0.8.3与RC1具有不兼容的API!

否则我需要提供一些症状。

+0

非常感谢。这导致了一个工作推送环境:)我会用修复更新我的问题。 – 2012-01-16 19:50:56