首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我正在使用primefaces的聊天示例,显然,当我试图打开频道时,我有一个异常。

我正在使用primefaces的聊天示例,显然,当我试图打开频道时,我有一个异常。
EN

Stack Overflow用户
提问于 2017-02-27 15:05:01
回答 2查看 784关注 0票数 0

在加载页面时发生,除解析器找不到通道空间或无法读取某些字符外。

代码语言:javascript
复制
<p:socket onMessage="handleMessage" channel="/{room}" autoConnect="false" widgetVar='subscriber' />

原因如下:

java.lang.IllegalArgumentException: /context/primepush/{room}不是有效的URL片段。考虑用类org.ocpsoft.urlbuilder.util.Encoder编码URL的相关部分

我的web.xml

代码语言:javascript
复制
<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>

在我的豆子里

代码语言:javascript
复制
 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;
        }
    }

我的xhtml

代码语言:javascript
复制
<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>

我试着

代码语言:javascript
复制
        <p:socket onMessage="handleMessage" channel="/%7Broom%7D"  

和其他错误

代码语言:javascript
复制
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.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-01 16:41:05

解决方案是只写/不带亲戚的房间,并且正确地创建了连接。

代码语言:javascript
复制
<p:socket onMessage="handleMessage" channel="/room" autoConnect="false" widgetVar='subscriber' />
票数 0
EN

Stack Overflow用户

发布于 2017-02-28 07:48:27

发生此错误是因为重写/PrettyFaces无法解析相应的URL。这可能是因为您使用的是2013年以来非常旧的重写/PrettyFaces版本。请更新到3.4.1。最近的版本中有一些关于URL解析的错误,我相信更新会解决您的问题。

请参阅:https://github.com/ocpsoft/rewrite/issues/224

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42489034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档