[Resolvido] Acessar método de classe instanciada

4 respostas
Marcelo_de_Andrade

Pessoal, gostaria de saber onde estou errando pois estou confuso. Tenho um List<Observador> que me estão os UsuarioBean que adicionei a lista, gostaria de recuperar o apelido do Usuario que o UsuarioBean carregou. Me perdoem pela confusão, tentarei detalhar. Estou estudando o padrão Observer e Managed Bean para a criação de um CHAT, didático apenas.

List<Observador> => UsuarioBean => Usuario => apelido
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(&quot;Painel: &quot; + mensagem);
		
	}

}
package com.marcelodeandrade.usuario;

import java.util.List;

import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.NoneScoped;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import com.marcelodeandrade.observer.Observador;

@ManagedBean(name = &quot;UsuarioBean&quot;)
@SessionScoped
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(mensagem);
			
		}
}
import java.util.ArrayList;
import java.util.List;

import com.marcelodeandrade.observer.Objeto;
import com.marcelodeandrade.observer.Observador;
import com.marcelodeandrade.usuario.Usuario;
import com.marcelodeandrade.usuario.UsuarioBean;

public class PainelMensagem implements Objeto {

	private String mensagem;
	private List&lt;Observador&gt; observadores;
	private List&lt;String&gt; mensagens;
	private static PainelMensagem instancia;
	
	public PainelMensagem(){
		this.observadores = new ArrayList&lt;Observador&gt;();
		this.mensagens = new ArrayList&lt;String&gt;();
	}
	
	public static PainelMensagem getInstancia(){
		if( instancia == null){
			instancia = new PainelMensagem();
		} 
		return instancia;
	}
	
	public List&lt;String&gt; getMensagens() {
		return mensagens;
	}

	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
		this.mensagens.add(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; getObservadores() {
		return observadores;
	}
}
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;

import com.marcelodeandrade.usuario.UsuarioBean;

@ManagedBean(name = "Main")

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();
		painelMensagem = PainelMensagem.getInstancia();
		getPainelMensagem().adicionarObservador(this.usuarioBean);
		
	}
}
import com.marcelodeandrade.observer.Observador;
import com.marcelodeandrade.usuario.Usuario;
import com.marcelodeandrade.usuario.UsuarioBean;


public class MetodoPrincial {
	
	public static void main(String[] args) {

		Usuario u1 = new Usuario();
		        u1.setApelido("u1");
		Usuario u2 = new Usuario();
				u2.setApelido("u2");
				
		UsuarioBean ub1 = new UsuarioBean();
					ub1.setUsuario(u1);
		UsuarioBean ub2 = new UsuarioBean();			
					ub2.setUsuario(u1);
		            
		PainelMensagem painelMensagem = PainelMensagem.getInstancia();
					   painelMensagem.adicionarObservador(ub1);
					   painelMensagem.adicionarObservador(ub2);
					   painelMensagem.setMensagem("Olá ");
					   
					   for(Observador o : painelMensagem.getObservadores() ){
						   System.out.println(o);
					   }

	}

}

No console o for(Observador o : painelMensagem.getObservadores() ) exibe:


com.marcelodeandrade.usuario.UsuarioBean@8dc8569
com.marcelodeandrade.usuario.UsuarioBean@45bab50a

Eu gostaria de exibir o apelido setado:

u1
u2

4 Respostas

E

Olá vc tem que sobrescrever o método toString!

Dá uma olhada aqui: http://www.guj.com.br/java/238421-sobre-o-metodo-tostring

Abs.,

Marcelo_de_Andrade

Obrigado pela atenção, irei ler com carinho. Mas uma dúvida que me intriga é:

O List possui UsuarioBean, que por sua vez tem Usuario. Estou pensando errado em pegar getListObservadores().getUsuarioBean.getUsuario().getApelido() ?

@edit

Mesmo assim, muito obrigado. Sobrescrevi o método e está funcionando como eu queria.

victormagno

A cada iteração do for each o que você tem é um objeto Observador e não um UsuárioBean. O Observador não conhece quem o implementa. Assim, você não pode acessar os métodos da classe UsuárioBean sem realizar um cast.

Tipo:

UsuarioBean ub = (UsuarioBean) o;
ub.getCoisasdeUsuarioBean();
Marcelo_de_Andrade

Obrigado, victormagno. Agradeço sua atenção e por sanar minha dúvida.

Criado 9 de novembro de 2012
Ultima resposta 9 de nov. de 2012
Respostas 4
Participantes 3