Bom dia, GUJ!
Estou tentando entender o funcionamento dos Managed Bean e estou uma com dúvidas:
- Tenho um Managed Bean que utiliza outro Managed Bean através da anotação Managed Property;
- O Managed Bean utilizado é o UsuarioBean, ele é carregado dentro do Managed Bean Main;
- Através do Managed Bean Main, gerencio os usuários e as mensagens a serem exibidas no painel;
Preciso obter o UsuarioBean instanciado, para que eu posso jogar ele no parâmetro de um método e estou com dificuldades. Poderiam também opinar sobre a forma que estou fazendo?
Obrigado.
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import com.marcelodeandrade.usuario.UsuarioBean;
@ManagedBean(name = "Main")
public class Main {
@ManagedProperty(value = "#{UsuarioBean}")
private UsuarioBean usuarioBean;
private PainelMensagem painelMensagem;
public Main(){
painelMensagem = PainelMensagem.getInstancia();
//painelMensagem.adicionarObservador(getUsuarioBean());
}
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;
}
}
package com.marcelodeandrade.usuario;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import com.marcelodeandrade.observer.Observador;
@ManagedBean(name = "UsuarioBean")
@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(getUsuario().getApelido() + " : " + mensagem);
}
@Override
public String toString(){
return getUsuario().getApelido();
}
}
import java.util.ArrayList;
import java.util.List;
import com.marcelodeandrade.observer.Objeto;
import com.marcelodeandrade.observer.Observador;
import com.marcelodeandrade.usuario.UsuarioBean;
public class PainelMensagem implements Objeto {
private String mensagem;
private List<Observador> observadores;
private List<String> mensagens;
private static PainelMensagem instancia;
public PainelMensagem(){
this.observadores = new ArrayList<Observador>();
this.mensagens = new ArrayList<String>();
}
public static PainelMensagem getInstancia(){
if( instancia == null){
instancia = new PainelMensagem();
}
return instancia;
}
public List<String> 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<Observador> getObservadores() {
return observadores;
}
}
<?xml version='1.0' encoding='ISO-8859-1' ?>
<!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:dataTable value="#{Main.painelMensagem.observadores}" var="observadores">
<h:column>#{observadores}</h:column>
</h:dataTable>
</h:form>
</h:panelGroup>
</p:layoutUnit>
<p:layoutUnit id="layoutUnitChatMensagens" position="center">
<h:panelGroup id="painelChatMensagens">
<h:form id="form1">
<h:outputText value="Ultima mensagem: #{Main.painelMensagem.mensagem}"/>
<h:dataTable value="#{Main.painelMensagem.mensagens}" var="msg">
<h:column>#{msg}</h:column>
</h:dataTable>
</h:form>
</h:panelGroup>
</p:layoutUnit>
<p:layoutUnit id="layoutUnitEnviarMensagens" position="south" size="100" >
<h:panelGroup id="painelEnviarMensagens" >
<h:form id="form2">
<h:panelGrid columns="2">
<h:column rendered="#{Main.usuarioBean.usuario.apelido == null}" >
<h:outputText value="Digite o apelido"/>
<h:inputText value="#{Main.usuarioBean.usuario.apelido }" id="apelido"/>
<h:commandButton value="Entrar na sala!"/>
</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 mensagem !">
<f:ajax event="click" execute=":form2:mensagem" render=":form1:" />
</h:commandButton>
</h:column>
</h:panelGrid>
</h:form>
</h:panelGroup>
</p:layoutUnit>
</p:layout>
</h:body>
</html>