Hebert_Coelho 6 de nov. de 2012
toncarvalho 6 de nov. de 2012
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.
Marcelo_de_Andrade 6 de nov. de 2012
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 )?
Marcelo_de_Andrade 6 de nov. de 2012
Gostaria de algumas opniões, se possível é claro, sobre a forma que estou implementando. Estou confuso e não consegui evoluir.
& lt ;? xml version = ' 1.0 ' encoding = ' UTF - 8 ' ? & gt ;
& lt ;! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" & gt ;
& lt ; 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" & gt ;
& lt ; h : head & gt ;
& lt ; link href = "#{facesContext.externalContext.requestContextPath}/estilo.css"
rel = "stylesheet" type = "text/css" /& gt ;
& lt ; title & gt ; Chat JSF & lt ; / title & gt ;
& lt ; / h : head & gt ;
& lt ; h : body & gt ;
& lt ; p : layout id = "layout" fullPage = "true" styleClass = "layout" size = "100" & gt ;
& lt ; p : layoutUnit id = "layoutUnitUsuariosOnline" position = "west" & gt ;
& lt ; h : panelGroup id = "painelUsuariosOnline" styleClass = "painelBorda" & gt ;
Usuários online :
& lt ; h : form & gt ;
& lt ; h : outputText value = "#{Main.painelMensagem.listarObservadores}" /& gt ;
& lt ; / h : form & gt ;
& lt ; / h : panelGroup & gt ;
& lt ; / p : layoutUnit & gt ;
& lt ; p : layoutUnit id = "layoutUnitChatMensagens" position = "center" & gt ;
& lt ; h : panelGroup id = "painelChatMensagens" & gt ;
& lt ; h : form & gt ;
& lt ; h : outputText value = "#{ Main.painelMensagem.mensagem }" /& gt ;
& lt ; / h : form & gt ;
& lt ; / h : panelGroup & gt ;
& lt ; / p : layoutUnit & gt ;
& lt ; p : layoutUnit id = "layoutUnitEnviarMensagens" position = "south" size = "100" & gt ;
& lt ; h : panelGroup id = "painelEnviarMensagens" & gt ;
& lt ; h : form & gt ;
& lt ; h : panelGrid columns = "2" & gt ;
& lt ; h : column rendered = "#{Main.usuarioBean.usuario.apelido == null}" & gt ;
& lt ; h : inputText value = "#{Main.usuarioBean.usuario.apelido }" id = "apelido" /& gt ;
& lt ; h : commandButton value = "Entrar !" /& gt ;
& lt ; / h : column & gt ;
& lt ; h : column rendered = "#{Main.usuarioBean.usuario.apelido != null}" & gt ;
& lt ; h : outputText value = "#{ Main.usuarioBean.usuario.apelido }" /& gt ;
& lt ; h : inputText value = "#{ Main.painelMensagem.mensagem }" id = "mensagem" /& gt ;
& lt ; h : commandButton value = "Enviar !" /& gt ;
& lt ; / h : column & gt ;
& lt ; / h : panelGrid & gt ;
& lt ; / h : form & gt ;
& lt ; / h : panelGroup & gt ;
& lt ; / p : layoutUnit & gt ;
& lt ; / p : layout & gt ;
& lt ; / h : body & gt ;
& lt ; / html & gt ;
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 & lt ; Observador & gt ; observadores ;
public PainelMensagem (){
this . observadores = new ArrayList & lt ; Observador & gt ;();
}
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 & lt ; Observador & gt ; 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 );
}