Boa noite, GUJ. Gostaria da ajuda de vocês para me orientar até a luz pois estou perdido.
Estou a criar um chat com JSF, estou implementando o padrão observer para o caso das mensagens. Tenho uma classe Usuario e seu respectivo bean, UsuarioBean . Também possui uma classe Painel onde manipula todo o evento das mensagens através do padrão observer junto com as interfaces.
Eu preciso criar um BEAN para essa classe Painel chamando o UsuarioBean? Estou confuso e creio não estar explicando muito bem.
Agradeço a atenção.
kilate
Novembro 6, 2012, 3:02am
#3
você pode usar a anotação @ManagedProperty caso esteja usando JSF 2.0:
@ManagedProperty(value = "#{alunoBean}")
private AlunoBean alunoBean;
Opa, bom dia da uma pesquisada no CDI e nas formas de trabalhar com injeção de dependência, tem muito recurso você pode anotar um bean com o escopo dependente com isso ele sempre assume o escopo de quem chamou, por exemplo se vc tiver um managed bean principal com escopo de sessao ou conversation, e chamar um outro como dependente ele vai sempre utilizar o bean dependente, sempre que precisar.
Você vai estar injetando um bean em outro.
Obrigado pela ajuda, estou em passos lentos mas já consegui algum resultado e me surgiram novas dúvidas.
Há algum problema o ManagedBean implementar a interface de observador ( Padrão Observer )?
Gostaria de algumas opniões, se possível é claro, sobre a forma que estou implementando. Estou confuso e não consegui evoluir.
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core" >
<h:head>
<link href="#{facesContext.externalContext.requestContextPath}/estilo.css"
rel="stylesheet" type="text/css" />
<title>Chat JSF</title>
</h:head>
<h:body>
<p:layout id="layout" fullPage="true" styleClass="layout" size="100">
<p:layoutUnit id="layoutUnitUsuariosOnline" position="west">
<h:panelGroup id="painelUsuariosOnline" styleClass="painelBorda">
Usuários online:
<h:form>
<h:outputText value="#{Main.painelMensagem.listarObservadores}"/>
</h:form>
</h:panelGroup>
</p:layoutUnit>
<p:layoutUnit id="layoutUnitChatMensagens" position="center">
<h:panelGroup id="painelChatMensagens">
<h:form>
<h:outputText value="#{ Main.painelMensagem.mensagem }"/>
</h:form>
</h:panelGroup>
</p:layoutUnit>
<p:layoutUnit id="layoutUnitEnviarMensagens" position="south" size="100">
<h:panelGroup id="painelEnviarMensagens">
<h:form>
<h:panelGrid columns="2">
<h:column rendered="#{Main.usuarioBean.usuario.apelido == null}" >
<h:inputText value="#{Main.usuarioBean.usuario.apelido }" id="apelido"/>
<h:commandButton value="Entrar !"/>
</h:column>
<h:column rendered="#{Main.usuarioBean.usuario.apelido != null}">
<h:outputText value="#{ Main.usuarioBean.usuario.apelido }"/>
<h:inputText value="#{ Main.painelMensagem.mensagem }" id="mensagem"/>
<h:commandButton value="Enviar !"/>
</h:column>
</h:panelGrid>
</h:form>
</h:panelGroup>
</p:layoutUnit>
</p:layout>
</h:body>
</html>
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import com.marcelodeandrade.observer.PainelMensagem;
import com.marcelodeandrade.usuario.UsuarioBean;
@ManagedBean(name = "Main")
@ApplicationScoped
public class Main {
@ManagedProperty(value = "#{UsuarioBean}")
private UsuarioBean usuarioBean;
private PainelMensagem painelMensagem;
public PainelMensagem getPainelMensagem() {
return painelMensagem;
}
public void setPainelMensagem(PainelMensagem painelMensagem) {
this.painelMensagem = painelMensagem;
}
public UsuarioBean getUsuarioBean() {
return usuarioBean;
}
public void setUsuarioBean(UsuarioBean usuarioBean) {
this.usuarioBean = usuarioBean;
}
public Main(){
this.usuarioBean = new UsuarioBean();
this.painelMensagem = new PainelMensagem();
painelMensagem.adicionarObservador(this.usuarioBean);
/* Usuario u1 = new Usuario();
Usuario u2 = new Usuario();
painelMensagem.adicionarObservador(u1);
painelMensagem.adicionarObservador(u2);
painelMensagem.setMensagem("Olaaa");
painelMensagem.removerObservador(u1);
painelMensagem.setMensagem("xau u1");*/
}
}
package com.marcelodeandrade.usuario;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import com.marcelodeandrade.observer.Observador;
@ManagedBean(name = "UsuarioBean")
@ApplicationScoped
public class UsuarioBean implements Observador{
private Usuario usuario;
public UsuarioBean(){
this.usuario = new Usuario();
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
@Override
public void atualizarMensagem(String mensagem) {
System.out.println("Painel: " + mensagem);
}
}
package com.marcelodeandrade.usuario;
import com.marcelodeandrade.observer.Observador;
public class Usuario implements Observador {
private String apelido;
public String getApelido() {
return apelido;
}
public void setApelido(String apelido) {
this.apelido = apelido;
}
@Override
public void atualizarMensagem(String mensagem) {
System.out.println("Painel: " + mensagem);
}
}
package com.marcelodeandrade.observer;
import java.util.ArrayList;
import java.util.List;
import com.marcelodeandrade.usuario.Usuario;
import com.marcelodeandrade.usuario.UsuarioBean;
public class PainelMensagem implements Mensagem {
private String mensagem;
private List<Observador> observadores;
public PainelMensagem(){
this.observadores = new ArrayList<Observador>();
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
notificarObservadores();
}
@Override
public void adicionarObservador(UsuarioBean usuarioBean) {
this.observadores.add(usuarioBean);
}
@Override
public void removerObservador(UsuarioBean usuarioBean) {
this.observadores.remove(usuarioBean);
}
@Override
public void notificarObservadores() {
for( Observador observador : this.observadores){
observador.atualizarMensagem(this.mensagem);
}
}
public List<Observador> getListarObservadores(){
return observadores;
}
}
package com.marcelodeandrade.observer;
import com.marcelodeandrade.usuario.Usuario;
import com.marcelodeandrade.usuario.UsuarioBean;
public interface Mensagem {
public void adicionarObservador(UsuarioBean usuarioBean);
public void removerObservador(UsuarioBean usuarioBean);
public void notificarObservadores();
}
package com.marcelodeandrade.observer;
public interface Observador {
public void atualizarMensagem(String mensagem);
}