2

プロジェクトにプライムプッシュカウンターを実装しようとしています。私は PrimeFaces3.5、Jboss7.0、および Eclipse Indigo バージョンを使用しています。

プライム プッシュに関連する jar を追加しました。

  1. 雰囲気-注釈-1.0.1.jar
  2. 雰囲気-compat-jbossweb-1.0.1.jar
  3. 大気互換トムキャット-1.0.1.jar
  4. 大気-compat-tomcat7-1.0.1.jar
  5. 大気-ランタイム-1.0.1.jar
  6. primefaces-3.5.jar および jsf および slf4j jar

私の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 でボタンをクリックすると、サーバー上ではカウントが増加しますが、更新されないため、自動的に 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
4

2 に答える 2

2

この例外は、Web アプリが Servlet 3 準拠のコンテナーで実行されている場合に発生します。正しい web.xml では、async-supported 要素が true に設定されている必要があります。次に例を示します。

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

参考:雰囲気のインストール

于 2013-04-22T08:33:46.137 に答える
0

プッシュ フレームワークについてはよくわかりませんが、JavaScript に問題があると思います。「.display」コントロールを更新しようとしていますが、.display のようなものはありません。

.display の代わりに '.out' を試してください

于 2013-04-22T07:12:12.500 に答える