| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2008 10:37:40
|
carlavb
JavaChild
Membro desde: 11/12/2007 19:47:40
Mensagens: 130
Offline
|
Fiz um chat em jsf assim:
a cada vez que um usuario se loga e manda uma mensagem, esta é adicionada numa tabela dentro de um escopo se sessão, sendo atualizada pelo poll
até ae tudo bem, as 2 sessoes estao recebendo a mensagem e mandando sem problemas
O chat nao tem privado, todas as mensagens sao publicas
Porém acontece o seguinte
Eu me logo
Vc se loga
Eu mando mensagem para todos
Como so tem vc na sala, vc responde
Outra pessoa entra no chat
ela consegue ver todas as mensagens anteriores
Eu queria fazer que nem um bate papo do uol, que a pessoa so ve as mensagens a partir da hora, que ela entrou, entende?
Será que eh um problema de arquitetura?(detalhe: fiz com um bean so de sessao)Uma sessao nao conhece a outra, so conhece essa tabela ...
Meu cod ta assim:
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2008 11:20:56
|
maurenginaldo
JavaEvangelist
![[Avatar]](/images/avatar/d82d678e9583c1f5f283ec56fbf1abb7.png)
Membro desde: 26/04/2006 18:16:41
Mensagens: 435
Localização: Belo Horizonte-MG
Offline
|
Oi Carla,
cria um atributo de sessão do usuário do site com a data/hora que ele logou.
Como vc tem a data/hora das mensagens enviadas, na hora de vc exibir as mensagens para os usuários vc testa horaMensagem > horaLogin.
Certo!
|
Mauren Ginaldo Souza
______________________________________________________________
"Quis Custodie Ipsos Custodes." Quem guardará os guardiões. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2008 12:15:59
|
carlavb
JavaChild
Membro desde: 11/12/2007 19:47:40
Mensagens: 130
Offline
|
O problema eh q essa tabela eh unica
Se eu tiver que exibir so as depois que ele logou, ao atualizar, isso vai mudar para todas as sessoes
As mensagens antigas nao vao aparecer pros usuarios antigos, que entraram antes desse usuario
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2008 14:28:54
|
Psycopata
JavaTeenager
![[Avatar]](/images/avatar/bfc89c3ee67d881255f8b097c4ed2d67.jpg)
Membro desde: 20/04/2006 10:45:02
Mensagens: 190
Offline
|
Você poderia colocar um campo timestamp na sua tabela e gravar na sessão do uduário o momento que ele logou. Sendo assim, vc faz a pesquisa na tabela com uma condição que o tempo sempre deve ser maior que o tempo em que o usuário logou. Acho que resolve o seu problema.
Espero não ser tarde
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2008 17:10:57
|
maurenginaldo
JavaEvangelist
![[Avatar]](/images/avatar/d82d678e9583c1f5f283ec56fbf1abb7.png)
Membro desde: 26/04/2006 18:16:41
Mensagens: 435
Localização: Belo Horizonte-MG
Offline
|
carlavb wrote:O problema eh q essa tabela eh unica
Se eu tiver que exibir so as depois que ele logou, ao atualizar, isso vai mudar para todas as sessoes
As mensagens antigas nao vao aparecer pros usuarios antigos, que entraram antes desse usuario
O que eu quis dizer é o seguinte:
Vamos supor que vc esteja usando um dataTable para exibir mensagens e um outputLabel para exibi-las.
Vc pode fazer com rendered...
ou com if
|
Mauren Ginaldo Souza
______________________________________________________________
"Quis Custodie Ipsos Custodes." Quem guardará os guardiões. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/07/2008 08:16:10
|
Psycopata
JavaTeenager
![[Avatar]](/images/avatar/bfc89c3ee67d881255f8b097c4ed2d67.jpg)
Membro desde: 20/04/2006 10:45:02
Mensagens: 190
Offline
|
Mas isso só acontece se ela utilizar ou classes estáticas no servidor, ou configurar o manage-beam com escopo de aplicação.
Com o escopo de sessão, cada usuário terá a sua instância no servidor. Então, se ela colocar a restrição no sql, ela consegue o resultado esperado.
Isso não se faz no JSF, se faz na classe de controle, porque é regra de negócio.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/07/2008 10:45:44
|
carlavb
JavaChild
Membro desde: 11/12/2007 19:47:40
Mensagens: 130
Offline
|
gente, nao adianta, pq a tabela fica a mesma para todas as sessoes, e o escopo eh sessao
<h:dataTable value="#{salaBean.mensagens}" var="msg" id="grid2" style="font-family:Trebuchet MS;">
<%--
oracle-jdev-comment:Faces.RI.DT.Class.Key:entrevista.Mensagem
--%>
<h:column>
<f:facet name="header">
<h:outputText value=""/>
</f:facet>
<h:outputText value="#{msg.hora}" style="font-color:Gray"/>
</h:column >
<h:column >
<f:facet name="header">
<h:outputText value="" />
</f:facet>
<h:outputText value="#{msg.usuario}" styleClass="#{msg.cor}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value=""/>
</f:facet>
<h:outputText value="#{msg.msgGenerica}"/>
</h:column>
</h:dataTable>
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/07/2008 11:28:46
|
maurenginaldo
JavaEvangelist
![[Avatar]](/images/avatar/d82d678e9583c1f5f283ec56fbf1abb7.png)
Membro desde: 26/04/2006 18:16:41
Mensagens: 435
Localização: Belo Horizonte-MG
Offline
|
carlavb wrote:gente, nao adianta, pq a tabela fica a mesma para todas as sessoes, e o escopo eh sessao
Joga a tabela para o scopo de aplicação, assim a tabela fica sendo única para todos.
|
Mauren Ginaldo Souza
______________________________________________________________
"Quis Custodie Ipsos Custodes." Quem guardará os guardiões. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/07/2008 12:41:11
|
carlavb
JavaChild
Membro desde: 11/12/2007 19:47:40
Mensagens: 130
Offline
|
mas eh isso que eu nao quero, que seja unica para todas....
eu quero que eu, que so entrei no chat depois de fulano, so veja as conversar depois da hora que eu loguei....
nao todas....se eu entrei antes de x, e x antes de a, eu vou ver todas as conversas de mesma forma
isso que eu nao quero.....
entende?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/07/2008 12:53:46
|
carlavb
JavaChild
Membro desde: 11/12/2007 19:47:40
Mensagens: 130
Offline
|
do jeito que eu to fazendo, todas as sessoes recebem as mensagem sem eu ter que adicionar em todas as sessoes, eu apenas adiciono uma linha de conversa na tabela e todas recebem, graças ao a4j:poll, porem eu queria que as tabelas ainda tievessem essa propriedade sem terem que serem alteradas por completo quando eu quiser mexer na logica de so mostrar X registros na sessao...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/07/2008 14:54:23
|
Psycopata
JavaTeenager
![[Avatar]](/images/avatar/bfc89c3ee67d881255f8b097c4ed2d67.jpg)
Membro desde: 20/04/2006 10:45:02
Mensagens: 190
Offline
|
Carla, mosta o método sala.
Outra coisa, como você está atualizando a tela?
Outra coisa, se você coloca uma restrição do tipo: hora > xxxx então, para cada usuário, os dados só serão exibido a partir dakela hora.
Agora, tem dois detalhes nesse abordagem:
primeiro, vc tem que usar o formato de data em DD/MM/AAA-HH:MM:SS
segundo, você deve guardar quando o usuário logou. E não pode usar estático. Mas esse é simples, basta criar um bean que guarda o valor. Como o bean será modificado apenas uma vez, enquanto o usuário estiver logado, o bean guarda o momento que ele logou.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/07/2008 16:50:14
|
maurenginaldo
JavaEvangelist
![[Avatar]](/images/avatar/d82d678e9583c1f5f283ec56fbf1abb7.png)
Membro desde: 26/04/2006 18:16:41
Mensagens: 435
Localização: Belo Horizonte-MG
Offline
|
Carla,
junte os post's anteriores e forme a seguinte solução.
Jogue o bean com as conversas para o scopo de aplicação e quando for mostrar as conversas faça o teste da hora da conversa > hora login do usuário, conforme sugestão anterior.
Penso que assim vai funcionar.
|
Mauren Ginaldo Souza
______________________________________________________________
"Quis Custodie Ipsos Custodes." Quem guardará os guardiões. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2008 09:44:14
|
carlavb
JavaChild
Membro desde: 11/12/2007 19:47:40
Mensagens: 130
Offline
|
Eu ja tinha posto com escopo de aplicação
Como o de aplicação atualiza para todos, e nao por sessao, se eu restringir com o IF, ele vai limitar as conversas para todos, como relatei antes
=/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2008 11:15:02
|
maurenginaldo
JavaEvangelist
![[Avatar]](/images/avatar/d82d678e9583c1f5f283ec56fbf1abb7.png)
Membro desde: 26/04/2006 18:16:41
Mensagens: 435
Localização: Belo Horizonte-MG
Offline
|
carlavb wrote:Eu ja tinha posto com escopo de aplicação
Como o de aplicação atualiza para todos, e nao por sessao, se eu restringir com o IF, ele vai limitar as conversas para todos, como relatei antes
=/
Carla, veja bem,
o bean com as conversas vai ficar no escopo de aplicação.
O IF vc vai colocar na página Jsf e não no java. A página Jsf não tem escopo.
|
Mauren Ginaldo Souza
______________________________________________________________
"Quis Custodie Ipsos Custodes." Quem guardará os guardiões. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/07/2008 19:18:41
|
carlavb
JavaChild
Membro desde: 11/12/2007 19:47:40
Mensagens: 130
Offline
|
Mas da o erro de que ele nao deixa comparar datas com o operador > e sim so com o after()....
como faço para comparar datas com >?
|
|
|
 |
|
|