Page 1 of 1
the message is not sent to private
Posted: 15 Sep 2014, 16:27
by blakingFaces
hi to all!
I a problem with primefaces push! I try the example of the cat is in the vitrin,
works well but as I sign out and I log the message is not sent to private .
Re: the message is not sent to private
Posted: 16 Sep 2014, 17:47
by smithh032772
share your PrimeFaces Push xhtml and java bean code, and see my signature below, and share version of browser, PrimeFaces, container (tomcat, glassfish, jboss, weblogic, ...), etc...
Re: the message is not sent to private
Posted: 17 Sep 2014, 09:47
by blakingFaces
here is my xhtml page :
Code: Select all
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui" template="/WEB-INF/template.xhtml">
<ui:define name="head">
<style type="text/css">
.value {
font-weight: bold;
}
.ui-datatable {
margin-bottom: 25px
}
.ui-datatable .ui-datatable-footer {
text-align: left;
}
.ui-datalist ul {
padding: 0 0 0 10px;
margin: 5px 0;
}
.ui-datatable .ui-button-icon-only .ui-button-text {
padding: 0;
line-height: 1.2;
}
.messageInput {
width: 400px;
}
.publicColumn {
width: 80%;
}
.usersColumn {
width: 20%;
}
.vtop {
vertical-align: top;
}
.chatlogs {
height: 200px;
overflow: auto;
padding: 0.5em 1em 0.5em 0.5em;
}
.usersList {
height: 200px;
overflow: auto;
}
.usersList ul {
list-style-type: none;
padding-left: 10px;
}
.usersList ul li {
margin-bottom: 2px;
}
.usersList .ui-button-text {
padding: 0;
}
</style>
</ui:define>
<ui:define name="title">
Incident
</ui:define>
<ui:define name="implementation">
<h:form id="incident">
<p:remoteCommand name="updateList" update="users" process="@this" />
<p:growl id="msg" showDetail="true" />
<p:tabView orientation="left" id="tabView">
<p:tab title="Vos Tickets" id="tab2">
<p:panel id="panelx" header="Tickets" toggleable="true">
<h:panelGrid columns="2" style="margin-bottom:10px"
cellpadding="5">
<p:selectOneRadio id="console"
value="#{ticketBean.afficheTicket}">
<f:selectItem itemLabel="Tous " itemValue="tous" />
<f:selectItem itemLabel=" En attente" itemValue="En attente" />
<f:selectItem itemLabel=" En cours" itemValue="En cours" />
<f:selectItem itemLabel=" Resolu" itemValue="Resolu" />
<f:selectItem itemLabel=" Rejeter" itemValue="Rejeter" />
<p:ajax event="change" update="ticketTab"></p:ajax>
</p:selectOneRadio>
</h:panelGrid>
</p:panel>
<p:spacer height="20"></p:spacer>
<p:dataTable value="#{ticketBean.ticketList}" var="o" rows="5"
paginator="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15,25,50" id="ticketTab"
widgetVar="ticketTable" style="wi"
emptyMessage="Aucune Information">
<p:column>
<f:facet name="header">Categorie</f:facet>
<h:outputText value="#{o.categorie}" />
</p:column>
<p:column>
<f:facet name="header">Titre</f:facet>
<h:outputLabel value="#{o.titre}" />
</p:column>
<p:column>
<f:facet name="header">Etat</f:facet>
<h:outputLabel value="#{o.etat}" />
</p:column>
<p:column>
<f:facet name="header">Date</f:facet>
<h:outputLabel value="#{o.date}" rendered="#{not o.date}" />
</p:column>
<p:column style="width:5%;text-align: center">
<p:commandButton update=":incident:incidentDetail"
oncomplete="PF('incidentDialog').show()" icon="ui-icon-search"
title="View">
<f:setPropertyActionListener value="#{o}"
target="#{ticketBean.ticket}" />
</p:commandButton>
</p:column>
</p:dataTable>
</p:tab>
<p:tab title="Statistique" id="tab3">
</p:tab>
</p:tabView>
<p:dialog header="Incident Info" widgetVar="incidentDialog"
modal="true" showEffect="drop" hideEffect="drop" resizable="false">
<p:outputPanel id="incidentDetail">
<h:panelGrid columns="2" cellpadding="5"
rendered="#{not empty ticketBean.ticket}">
<h:outputLabel for="demandeur" value="Demandeur" />
<h:inputText id="demandeur" value="#{ticketBean.partenaire}"
disabled="true" />
<h:outputLabel for="techt" value="Technicien"
rendered="#{menuBean.valueAffectationTicket}"></h:outputLabel>
<p:selectOneMenu value="#{ticketBean.technicien2}" filter="true"
filterMatchMode="startsWith" panelStyle="width:190px" id="techt"
rendered="#{menuBean.valueAffectationTicket}" effect="drop"
height="150" label="Produit" style="width: 25%;">
<f:selectItem itemLabel="--Select--" itemValue="" />
<f:selectItems value="#{ticketBean.technicienList2}" />
</p:selectOneMenu>
<h:outputLabel for="categ" value="Affecte A"></h:outputLabel>
<h:inputText id="categ" value="#{ticketBean.technicien3}"
disabled="true" />
<h:outputLabel for="titr" value="Titre"></h:outputLabel>
<h:inputText id="titr" value="#{ticketBean.ticket.titre}"
disabled="true" />
<h:outputLabel for="descript" value="Description :"
rendered="#{not chatView.loggedIn}" />
<h:inputTextarea id="descript"
value="#{ticketBean.ticket.description}" rows="8" cols="100"
disabled="true" rendered="#{not chatView.loggedIn}" />
<h:outputLabel value="Resolution"></h:outputLabel>
<p:fieldset id="container" legend="Resolution" toggleable="true">
<h:panelGroup rendered="#{chatView.loggedIn}">
<h:panelGrid columns="2"
columnClasses="publicColumn,usersColumn" style="width:100%">
<p:outputPanel id="public" layout="block"
styleClass="ui-corner-all ui-widget-content chatlogs">
<ui:repeat var="boucle" value="#{chatView.messages}">
<h:outputLabel value="#{boucle}"></h:outputLabel>
<br />
</ui:repeat>
</p:outputPanel>
<p:dataList id="users" var="user" value="#{chatUsers.users}"
styleClass="usersList" emptyMessage="Aucun User"
rendered="#{chatView.cacheList}">
<f:facet name="header">
Users
</f:facet>
<p:commandButton title="Chat" icon="ui-icon-comment"
oncomplete="PF('pChat').show()"
update=":incident:privateChatContainer">
<f:setPropertyActionListener value="#{user}"
target="#{chatView.privateUser}" />
</p:commandButton>
#{user}
</p:dataList>
</h:panelGrid>
<p:separator />
<p:inputText value="#{chatView.globalMessage}"
styleClass="messageInput" />
<p:spacer width="5" />
<p:commandButton value="Send"
actionListener="#{chatView.sendPrivate2()}"
oncomplete="$('.messageInput').val('').focus()" />
<p:spacer width="5" />
<p:commandButton value="Disconnect"
action="#{chatView.disconnect}" global="false"
update=":incident:incidentDetail"/>
</h:panelGroup>
<h:panelGroup rendered="#{not chatView.loggedIn}">
Login : <p:inputText value="#{chatView.username}"
disabled="true" />
<p:spacer width="5" />
<p:commandButton value="OK" action="#{chatView.login}"
update="incidentDetail" icon="ui-icon-person" disabled="false">
<f:setPropertyActionListener
value="#{ticketBean.ticket.ticketId}"
target="#{chatView.ticketId}" />
</p:commandButton>
</h:panelGroup>
</p:fieldset>
<h:outputLabel for="dateOuv" value="Date de la demande : "></h:outputLabel>
<h:inputText id="dateOuv" value="#{ticketBean.ticket.date}"
disabled="true" />
<h:outputLabel for="dateResol" value="Date de la resolution : "
rendered="#{not chatView.loggedIn}"></h:outputLabel>
<h:inputText id="dateResol" value=""
disabled="true" rendered="#{not chatView.loggedIn}" />
<h:outputLabel for="etat2" value="Etat : "
rendered="#{not chatView.loggedIn}"></h:outputLabel>
<p:selectOneMenu value="#{ticketBean.etat2}" filter="true"
filterMatchMode="startsWith" panelStyle="width:190px" id="etat2"
rendered="#{not chatView.loggedIn}" effect="drop" height="150"
label="Produit" style="width: 25%;">
<f:selectItem itemLabel="--Select--" itemValue="" />
<f:selectItems value="#{ticketBean.etatList}" />
</p:selectOneMenu>
</h:panelGrid>
<p:separator></p:separator>
<h:commandButton value="Enregistrer"
action="#{ticketBean.SaveActions()}" styleClass="sansLabel">
<f:setPropertyActionListener value="#{ticketBean.ticket.ticketId}"
target="#{ticketBean.ticketId2}" />
<f:ajax execute="incidentDetail" render="incidentDetail" />
</h:commandButton>
</p:outputPanel>
</p:dialog>
<p:dialog widgetVar="pChat" header="Private Chat" modal="true"
showEffect="fade" hideEffect="fade">
<h:panelGrid id="privateChatContainer" columns="2"
columnClasses="vtop,vtop">
<p:outputLabel for="pChatInput" value="To: #{chatView.privateUser}" />
<p:inputTextarea id="pChatInput" value="#{chatView.privateMessage}"
rows="5" cols="30" />
<p:spacer />
<p:commandButton value="Send"
actionListener="#{chatView.sendPrivate}"
oncomplete="PF('pChat').hide()" />
</h:panelGrid>
</p:dialog>
</h:form>
<p:socket onMessage="handleMessage" channel="/{room}"
autoConnect="false" widgetVar='subscriber' />
<script type="text/javascript">
function handleMessage(message) {
var chatContent = $(PrimeFaces
.escapeClientId('incident: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>
</ui:define>
</ui:composition>
here is my managedBean :
Code: Select all
@ManagedBean
@ViewScoped
public class ChatView implements Serializable {
/**
*
*/
private static final long serialVersionUID = 890730923295693231L;
private final EventBus eventBus = EventBusFactory.getDefault().eventBus();
@ManagedProperty("#{chatUsers}")
private ChatUsers users;
private String privateMessage;
private String globalMessage;
private String username;
private boolean loggedIn, cacheList;
private String ticketId;
private String privateUser;
private ValidatorLogin validatorLogin = null;
private static final String CHANNEL = "/{room}/";
private String login;
private List<String> usersTicket = new ArrayList<String>();
private List<String> messages = new ArrayList<String>();
private TicketDAO ticketDAO = null;
@PostConstruct
public void init() {
ticketDAO = new TicketDAO();
}
@ManagedProperty("#{identificationBean}")
private IdentificationBean identification;
public ChatUsers getUsers() {
return this.users;
}
public void setUsers(ChatUsers users) {
this.users = users;
}
public String getPrivateUser() {
return this.privateUser;
}
public void setPrivateUser(String privateUser) {
this.privateUser = privateUser;
}
public String getGlobalMessage() {
return this.globalMessage;
}
public void setGlobalMessage(String globalMessage) {
this.globalMessage = globalMessage;
}
public String getPrivateMessage() {
return this.privateMessage;
}
public void setPrivateMessage(String privateMessage) {
this.privateMessage = privateMessage;
}
public String getUsername() {
username = identification.getLogin();
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public boolean isLoggedIn() {
return this.loggedIn;
}
public void setLoggedIn(boolean loggedIn) {
this.loggedIn = loggedIn;
}
public void sendGlobal() {
this.eventBus.publish("/{room}/*", this.username.toUpperCase() + " :> "
+ this.globalMessage);
this.globalMessage = null;
}
public void sendPrivate() {
this.eventBus.publish("/{room}/" + this.privateUser, "[PM] "
+ this.username.toUpperCase() + " :> " + this.privateMessage);
this.privateMessage = null;
}
public void sendPrivate2() {
String val1 = "";
for (String val : this.users.getUsersTicket()) {
val1 = (String) val.subSequence(val.indexOf("---") + 3,
val.length());
if (val1.trim().equals(ticketId)) {
this.eventBus.publish("/{room}/" + val,
"" + this.username.toUpperCase() + " :> "
+ this.globalMessage);
}
}
ticketDAO.InsertAction2(ticketId, this.username.toUpperCase() + " :> "
+ this.globalMessage);
this.globalMessage = null;
}
public void login() {
RequestContext requestContext = RequestContext.getCurrentInstance();
if (this.users.contains(this.username)) {
this.users.remove(this.username);
this.users.getUsersTicket().remove(username + "---" + ticketId);
// this.users.getUsersTicket().add(username+"---"+ticketId);
// this.users.add(this.username);
this.loggedIn = false;
// FacesContext.getCurrentInstance().addMessage(null,new
// FacesMessage(FacesMessage.SEVERITY_ERROR,"Username taken",
// "Try with another username."));
// requestContext.update("incident:msg");
} else {
this.users.add(this.username);
this.users.getUsersTicket().add(username + "---" + ticketId);
requestContext.execute("PF('subscriber').connect('/"
+ this.username + "---" + ticketId + "')");
this.loggedIn = true;
}
}
public void disconnect() {
//RequestContext requestContext = RequestContext.getCurrentInstance();
this.users.remove(this.username);
this.users.getUsersTicket().remove(username + "---" + ticketId);
//requestContext.execute("PF('subscriber').disconnectconnect('/"+ this.username + "---" + ticketId + "')");
System.out.println("Disconnect ! ");
// this.eventBus.publish("/{room}/*", this.username +
// " left the channel.");
RequestContext.getCurrentInstance().update("incident:users");
this.loggedIn = false;
// this.username = null;
}
public String getTicketId() {
return ticketId;
}
public void setTicketId(String ticketId) {
this.ticketId = ticketId;
}
public IdentificationBean getIdentification() {
return identification;
}
public void setIdentification(IdentificationBean identification) {
this.identification = identification;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public List<String> getUsersTicket() {
return usersTicket;
}
public void setUsersTicket(List<String> usersTicket) {
this.usersTicket = usersTicket;
}
public boolean isCacheList() {
return cacheList;
}
public void setCacheList(boolean cacheList) {
this.cacheList = cacheList;
}
public List<String> getMessages() {
messages.clear();
messages = ticketDAO.msgList(ticketId);
return messages;
}
public void setMessages(List<String> messages) {
this.messages = messages;
}
}
Re: the message is not sent to private
Posted: 17 Sep 2014, 09:51
by blakingFaces
I use primefaces 5.0 and apache tomcat 7.0.30
Re: the message is not sent to private
Posted: 17 Sep 2014, 13:04
by smithh032772
if you copy/pasted the PrimeFaces Push - Chat example source code from the showcase, then it is designed/implemented to only push to public when you logout (or disconnect).
i looked at your code (below), and you have code commented out.
Code: Select all
public void disconnect() {
//RequestContext requestContext = RequestContext.getCurrentInstance();
this.users.remove(this.username);
this.users.getUsersTicket().remove(username + "---" + ticketId);
//requestContext.execute("PF('subscriber').disconnectconnect('/"+ this.username + "---" + ticketId + "')");
System.out.println("Disconnect ! ");
// this.eventBus.publish("/{room}/*", this.username +
// " left the channel.");
RequestContext.getCurrentInstance().update("incident:users");
this.loggedIn = false;
// this.username = null;
}
Re: the message is not sent to private
Posted: 18 Sep 2014, 16:04
by blakingFaces
I just remove the comments but after disconnections and reconnection to chat, send private messages does not work!
Code: Select all
public void disconnect() {
this.users.remove(this.username);
this.users.getUsersTicket().remove(username + "---" + ticketId);
this.eventBus.publish("/{room}/*", this.username +" left the channel.");
RequestContext.getCurrentInstance().update("incident:users");
this.loggedIn = false;
this.username = null;
}