2017-02-27 3 views
0

ページの読み込み時に発生し、パーザはチャンネルルームを見つけられず、または一部の文字を読み取ることができません。私はチャットのプライムフェイスの例を使用しています。明らかにチャンネルを開くときに例外があります

に起因
<p:socket onMessage="handleMessage" channel="/{room}" autoConnect="false" widgetVar='subscriber' /> 

java.lang.IllegalArgumentExceptionが:[/コンテキスト/ primepush/{部屋}]は、有効なURLフラグメントではありません。私のXHTML

[クラスorg.ocpsoft.urlbuilder.util.Encoder]

私のweb.xml

私の豆で
<servlet> 
     <servlet-name>Push Servlet</servlet-name> 
     <servlet-class>org.primefaces.push.PushServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
     <async-supported>true</async-supported> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Push Servlet</servlet-name> 
     <url-pattern>/primepush/*</url-pattern> 
    </servlet-mapping> 

public void login(BLogin log) { 
RequestContext requestContext = RequestContext.getCurrentInstance(); 
     username=log.getLogNombres()+" "+log.getLogApellidos(); 
     if(users.contains(username)) { 
      //loggedIn = false; 
      //FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Username taken", "Try with another username.")); 
      //requestContext.update("growl"); 
      // requestContext.execute("PF('subscriber').connect('/" + username + "')"); 
      loggedIn = true; 
     } 
     else{ 
      users.add(username); 
      requestContext.execute("PF('subscriber').connect('/" + username + "')"); 
      loggedIn = true; 
     } 
    } 

とURLの関連部分をコードして考えてみましょう

<f:metadata> 
      <f:event type="preRenderView" listener="#{chatView.login(bLoginController.getbLogin())}" /> 
     </f:metadata> 
      <p:growl id="growl" showDetail="true"/> 
      <p:socket onMessage="handleMessage" channel="/{room}" autoConnect="false" widgetVar='subscriber' /> 
      <script type="text/javascript"> 
       function handleMessage(message) { 
        var chatContent = $(PrimeFaces.escapeClientId('form:public')), 
          text = (message.user) ? message.user + ':' + message.text : message.text; 

        chatContent.append(text + '<br />'); 

        //keep scroll 
        chatContent.scrollTop(chatContent.height()); 

        if (message.updateList) { 
         updateList(); 
        } 
       } 
      </script> 

私はお試しください

 <p:socket onMessage="handleMessage" channel="/%7Broom%7D" 

およびその他のエラー

16:16:21,998 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (default task-16) Error Rendering View[/pages/home.xhtml]: java.lang.IllegalStateException: No parameter [room] was set in the pattern [/context/primepush/{room}]. Call address.set("room", value); or remove the parameter from the pattern. 
+0

作成された関連するコードを記載してください。 – Julian

+0

質問に正しい形式(コメントではありません)でコードを投稿してください。このように読むのはほとんど不可能です。最初に投稿したコードで質問を更新しました。それ以来、あなたはあなたのコメントを更新しました。あなたのコードは読みやすくなりますので、もっと多くの回答が得られます。 – Julian

+0

よろしくお願いします。私はまだそれを解決する方法を見つけることができません –

答えて

0

ソリューションは、親族なしでのみ書き込み/部屋にあり、接続が正しく

<p:socket onMessage="handleMessage" channel="/room" autoConnect="false" widgetVar='subscriber' /> 
0

リライト/ PrettyFacesは、対応するURLを解析するために失敗したため、エラーが発生します。おそらく2013年のRewrite/PrettyFacesの古いバージョンを使用しているからです。3.4.1.Finalに更新してください。最新のリリースではURL解析に関するいくつかのバグ修正がありましたが、更新することで問題が解決されると確信しています。

参照: https://github.com/ocpsoft/rewrite/issues/224

+0

I prettyfacesのバージョンを3.4.1に変更し、同じエラーを生成します –

関連する問題