0

ダイアログで p:push を使用しようとしていますが、クロムで次のエラーが発生します。

Uncaught Error: INVALID_STATE_ERR: DOM Exception 11 primefaces.js.xhtml:1
    PrimeFaces.widget.PrimeWebSocket.send primefaces.js.xhtml:1
    PrimeFaces.ajax.AjaxUtils.handleResponse primefaces.js.xhtml:1
    PrimeFaces.ajax.AjaxResponse primefaces.js.xhtml:1
    k.success primefaces.js.xhtml:1
    b.Callbacks.bv jquery.js.xhtml:16
    b.Callbacks.bE.fireWith jquery.js.xhtml:16
    bF jquery.js.xhtml:23
    b.ajaxTransport.send.bv

プッシュ サーバーは、ポート 9090 の jetty 8.1.5.v20120716 で実行されています。これは、アプリケーションの web.xml の一部です。

<context-param>
       <param-name>primefaces.PUSH_SERVER_URL</param-name>
       <param-value>ws://localhost:9090/push/</param-value>
</context-param>

これは、プッシュ サーバーの web.xml の内容です。

<display-name>PUSH SERVER</display-name>
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
    <servlet-name>Push Servlet</servlet-name>
    <servlet-class>org.primefaces.push.PushServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <init-param>
        <param-name>channels</param-name>
        <param-value>importador</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>Push Servlet</servlet-name>
    <url-pattern>/push/*</url-pattern>
</servlet-mapping>

ダイアログの内容:

...
<h:panelGroup layout="block" styleClass="hrgi-div-form clearfix">
       <h:panelGroup id="painel" layout="block">
                <p:progressBar widgetVar="barraProgressoImportador" ajax="true"
                               value="#{modeloPopupImportadorImediatoNFe.porcentagem}"/>
                <h:outputText value="#{modeloPopupImportadorImediatoNFe.mensagem}"/>
       </h:panelGroup>
       <p:push channel="importador" onmessage="atualizarPorcentagemImportacao"/>
</h:panelGroup>
...

呼び出される JavaScript コード (アラートを表示するだけ):

function atualizarPorcentagemImportacao(evt, data){
    alert("importado "+data);
}

最後に、プッシュを試みるコード:

public void abrir() {
        ...
        modeloPopup.setContext(RequestContext.getCurrentInstance());
        modeloPopup.getContext().push("importador", 0);
}

私は何か間違ったことをしていますか??

追加 役立つ場合、これは私のプッシュサーバーの pom.xml です

<parent>
    <artifactId>modulos-web</artifactId>
    <groupId>com.hrgi.web</groupId>
    <version>0.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>push-server</artifactId>
<packaging>war</packaging>
<name>push-server</name>
<dependencies>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-websocket</artifactId>
        <version>8.1.5.v20120716</version>
    </dependency>
    <dependency>
        <groupId>org.atmosphere</groupId>
        <artifactId>atmosphere-runtime</artifactId>
        <version>1.0.1</version>
    </dependency>
</dependencies>
<build>
    <finalName>push-server</finalName>
    <plugins>
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>8.1.5.v20120716</version>
            <configuration>
                <connectors>
                    <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                        <port>9090</port>
                        <maxIdleTime>60000</maxIdleTime>
                    </connector>
                </connectors>
            </configuration>
        </plugin>
    </plugins>
</build>
4

1 に答える 1

1

プッシュを機能させるには、次のセットアップが必要です。

pom.xml で:

    <dependency>
      <groupId>org.atmosphere</groupId>
      <artifactId>atmosphere-runtime</artifactId>
      <version>1.0.0.RC1</version> 
    </dependency>

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_user_quide ドキュメントを参照してください。

于 2012-10-01T08:38:54.883 に答える