Primefaces 推送私人频道错误 room/user/user/user/
Primefaces Push Private Channel wrong room/user/user/user/
当我测试 primefaces(5.2) 推送示例(计数器、通知、照片共享)时,除了聊天(same code from page primefaces,复制粘贴示例页面中的代码)之外,所有的工作都完全正常,这里出现了一个细节:
- 用户名:"felipe" 登录(私信工作)
private channel = /pushmob/primepush/{room}/felipe
用户名:"felipe" 注销
用户名:"felipe"登录(私信无效)
private channel = /pushmob/primepush/{room}/felipe/felipe
其他用户登录无法给felipe发送私信。
为了检测到私人频道,我在控制台中使用
PF('subscriber').cfg.request.url
有什么想法吗???
PrimeFaces 5.2
氛围 2.3.4
来自聊天示例的相同代码。
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>
index.xhtml
<p:socket onMessage="handleMessageChat" channel="/{room}"
autoConnect="false" widgetVar='subscriber' />
chatview.xhtml
public class ChatView implements Serializable {
private final static String CHANNEL = "/{room}/";
public void sendGlobal() {
eventBus.publish(CHANNEL + "*", username + ": " + globalMessage);
globalMessage = null;
}
public void sendPrivate() {
eventBus.publish(CHANNEL + privateUser, "[PM "+ username + "] " + username + ": "
+ privateMessage);
eventBus.publish(CHANNEL + username, "[PM " + privateUser + "] " + username + ": "
+ privateMessage);
privateMessage = null;
}
public void login() {
RequestContext requestContext = RequestContext.getCurrentInstance();
if(users.contains(username)) {
loggedIn = false;
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Username taken", "Try with another username."));
requestContext.update("growl");
}
else {
users.add(username);
requestContext.execute("PF('subscriber').connect('/" + username + "')");
loggedIn = true;
}
}
public void disconnect() {
//remove user and update ui
users.remove(username);
RequestContext.getCurrentInstance().update("form:users");
//push leave information
eventBus.publish(CHANNEL + "*", username + " left the channel.");
//reset state
loggedIn = false;
username = null;
}
}
}
已解决...我必须创建两个页面,一个用于登录,另一个用于聊天,以便成功使用私人频道。
当我测试 primefaces(5.2) 推送示例(计数器、通知、照片共享)时,除了聊天(same code from page primefaces,复制粘贴示例页面中的代码)之外,所有的工作都完全正常,这里出现了一个细节:
- 用户名:"felipe" 登录(私信工作)
private channel = /pushmob/primepush/{room}/felipe
用户名:"felipe" 注销
用户名:"felipe"登录(私信无效)
private channel = /pushmob/primepush/{room}/felipe/felipe
其他用户登录无法给felipe发送私信。
为了检测到私人频道,我在控制台中使用 PF('subscriber').cfg.request.url
有什么想法吗???
PrimeFaces 5.2
氛围 2.3.4
来自聊天示例的相同代码。
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>
index.xhtml
<p:socket onMessage="handleMessageChat" channel="/{room}"
autoConnect="false" widgetVar='subscriber' />
chatview.xhtml
public class ChatView implements Serializable {
private final static String CHANNEL = "/{room}/";
public void sendGlobal() {
eventBus.publish(CHANNEL + "*", username + ": " + globalMessage);
globalMessage = null;
}
public void sendPrivate() {
eventBus.publish(CHANNEL + privateUser, "[PM "+ username + "] " + username + ": "
+ privateMessage);
eventBus.publish(CHANNEL + username, "[PM " + privateUser + "] " + username + ": "
+ privateMessage);
privateMessage = null;
}
public void login() {
RequestContext requestContext = RequestContext.getCurrentInstance();
if(users.contains(username)) {
loggedIn = false;
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Username taken", "Try with another username."));
requestContext.update("growl");
}
else {
users.add(username);
requestContext.execute("PF('subscriber').connect('/" + username + "')");
loggedIn = true;
}
}
public void disconnect() {
//remove user and update ui
users.remove(username);
RequestContext.getCurrentInstance().update("form:users");
//push leave information
eventBus.publish(CHANNEL + "*", username + " left the channel.");
//reset state
loggedIn = false;
username = null;
}
} }
已解决...我必须创建两个页面,一个用于登录,另一个用于聊天,以便成功使用私人频道。