gente, eu preciso fazer um chat em JSF, eu sou fluente em JSF, mas eu nao sei nada sobre sockets, etc, como faço para 2 pcs falarem pelo servidor, nao sei nada disso, sou analfabeta nisso
alguem tem algum codigo , material
por favor serei mt grata
Uai, já que vai ser web… usa JSF + Richfaces (Ajax).
Ei carla tem esse tutorial aqui: http://www.guj.com.br/java.tutorial.artigo.20.1.guj
so que é feito todo em servlet. é so pegar a base do chat e adequar conforme vc precisa
alguem ja chegou a fazert algo desse tipo?
carla… pensei em algo do tipo:
usar ajax e manter o conteudo do banco de dados ou de um arquivo “sincronizado” para os usuarios…
ficaria um chat em tempo real … entendeu?
att,
Renan
eu tava pensando, a princípiom en fazer tudo em memória, mas a sua ideia de banco de dados seria para pegar a ultima mensagem sempre e exibir?
tem como eu garantir, para que, a cada envio de mensagem, essa mensagem seja exibida para todos nao?
Existe um exemplo de chat com o IceFaces. Porém mais importante que escolher o framework ou conjunto de componentes é entender como funciona o conceito (comunicação) de chat numa aplicação web.
Veja o demo aqui,
http://auctionmonitor.icefaces.org/auctionMonitor/
Abraços.
Eu sugiro você pesquisar a tecnologia “comet” ou “push server” também conhecida como “ajax push server”, do qual acredito ser uma das melhores soluções para construção de chat web, essa tecnologia é largamente empregada em home brokers.
Frameworks como DWR já possuem isso, se não me engano a versão 3.x . Para JSF o IceFaces já possui isso há um bom tempo, quase que desde o seu inicio. Um amigo meu uma vez desenvolveu um chat com Icefaces que funcionava muito bem numa intranet, porém se tornava instável na internet pois o servidor onde estava hospedado a aplicação possuia problemas com o link.
Enfim, é possível simular o “ajax push server” através de pooling (acho que por baixo dos panos todos fazem isso), ou seja, ficar verificando de tempo em tempo no servidor se há novas mensagens através de AJAX. O Richfaces/Ajax4jsf possui dois componentes para isso, vale a pena olhar.
Abraços.
Rafael, e qual seria essa arquitetura de chats que vc disse que tenho q entender?
Mesmo usando o a4j:poll, eu preciso sincronizar as mensagens ou me despreocupo com isso?
e se tiver que sincronizar, isso vai ser feito na hora que o servidor atualiza ou qd eu disparo a ação?
Eu construi um atendimento on-line com JSF e RichFaces. Sabe quando vc entra num site q quer ser atendida via chat. Foi algo bem simples de fazer mas q precisou de um certo planejamento pra não dar zebra.
No meu caso Carla como era necessário um cliente digitar o CPF para ser atendido então ele digitva e caia num tela com um textArea e um input pra mandar as mensagens…quando um atendente fosse atende-lo eu armazenava o cpf do cliente no atendente e ambos falavam através de um HashMap onde a chave era o CPF e o valor era a linha de onversa q eles enviavam ao dar o submit.
Com o Ajax4Jsf eu ficava de 5 em 5 segundo atualizando o text area de cada um sem a necessidade de ir ao banco de dados…ficou bacana…
eu percebi que no tutorial com servlets do guj ele usa um notify all quando manda a mensage, no caso nao preciso disso, mas preciso usar o syncronize, eu to perdida, cada um diz uma coisa =p
No meu caso é mais simples, pois nao ha mensagem privada, o chat todos veem, entao nao precisaria do HashMap, certo?
bjs
[quote=carlavb]Rafael, e qual seria essa arquitetura de chats que vc disse que tenho q entender?
Mesmo usando o a4j:poll, eu preciso sincronizar as mensagens ou me despreocupo com isso?
e se tiver que sincronizar, isso vai ser feito na hora que o servidor atualiza ou qd eu disparo a ação?[/quote]
Oi Carla,
Não é bem uma arquitetura de chats que você precisa entender, mas somente que a comunicação difere quando se trabalha via web, não há uma conexão ponto-a-ponto, o cliente sempre terá que ficar vericando no servidor se o atentende respondeu algo. Pelo jeito acredito que você tenha entendido.
Agora acredito que o interessante é você saber se as mensagens serão persistidas, ou quanto tempo elas ficarão em um histórico, ou quantos usuários utilizarão o chat ao mesmo tempo, se cada atentende irá conversar com quantos usuários e por ae.
[quote=carlavb]eu percebi que no tutorial com servlets do guj ele usa um notify all quando manda a mensage, no caso nao preciso disso, mas preciso usar o syncronize, eu to perdida, cada um diz uma coisa =p
No meu caso é mais simples, pois nao ha mensagem privada, o chat todos veem, entao nao precisaria do HashMap, certo?
bjs[/quote]
Não precisaria…seria só um List de String contendo o que cada um diz…e aí vc retorna as frases usando o Ajax…assim é até mais simples…
O tutorial do GUJ usa servlets…e eu particularmente achei complicado. Por isso fiz o meu em JSF. Até pensei em escrever um segundo tutorial pra bater aquele q esta no GUj mas não deu tempo…
Po Giulliano, ia ser uma boa esse tutorial sobre Chat em JSF!
Eu entendi esse lance de arquitetura, agora vai ser bem mais fácil.
Outra coisa, que componente vcs usam para mostrar a mensagem?
Eu pensei em dar um append na DIV, mas eu acho que ia ser tosco, abordagem meio servlet, nao?
Bjos e mt obrigada a todos
pois é…o problema é tempo mesmo…
pra exibir as mensagens eu usei um richPanel e em cima desse richPanel fivaca um ajax4Jsf (poll) que ficava renderizando a página de tempos em tempos…
vc esta acostumada com JSF ??? Pq não devemos usar html dentro de uma página JSF…apenas componetes…pesquise sempre por componentes e esqueça servlet Carla…senão seu projto pode ficar meio estranho…
[]'s
Essa era a tela do cliente:
<%@ page contentType="text/html; charset=Cp1252" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<f:view>
<a4j:region>
<h:form>
<a4j:poll action="#{AjaxHandler.atualizarPagina}" interval="5000" reRender="historico" ajaxSingle="true" />
</h:form>
</a4j:region>
<h:form id="formularioCliente">
<rich:panel header="Atendimento on-line ">
<h:outputText value="Atendimento On Line" />
<br /><br />
<h:outputLabel value="Histórico da Conversa"/>
<br />
<rich:scrollableDataTable value="#{ChatHandler.historicoDaConversa}"
var="conversa"
id="historico"
width="400px"
height="200px">
<rich:column width="397px">
<h:outputText value="#{conversa}" />
</rich:column>
</rich:scrollableDataTable>
<br /><br />
</rich:panel>
<rich:panel header="Escreva suas mensagens aqui">
<h:outputText value="Mensagem: "/>
<h:inputTextarea value="#{ChatHandler.atendimento.linhaDeConversa}" />
<h:commandButton action="#{ChatHandler.adicionaLinhaConversaCliente}" value="enviar" />
<br /><br />
<h:outputText value="Nota do Atendimento" style="width:300px" />
<h:commandButton action="#{ChatHandler.irParaAvaliacaoAtendimento}" value="Deixe sua nota para esse Atendimento" />
</rich:panel>
</h:form>
</f:view>
Só uma pergunta, por que ao enviar uma mensagem pro servidor você não se utiliza de AJAX?
<h:commandButton action="#{ChatHandler.adicionaLinhaConversaCliente}" value="enviar" />
[quote=rponte]Só uma pergunta, por que ao enviar uma mensagem pro servidor você não se utiliza de AJAX?
<h:commandButton action="#{ChatHandler.adicionaLinhaConversaCliente}" value="enviar" />
pq assim a página é atualizada no momento em q ele mandar a msg…além dos 5 segundo determinados …