Classe bean JSF implementa uma ação?

11 respostas
E

[code]
Código para UsuarioBean.java

package estudos;

public class UsuarioBean{
private String nome;
private String senha;

public String getNome(){
return this.nome;
}

public void setNome(String no){
this.nome = no;
}

public String getSenha(){
return this.senha;
}

public void setSenha(String se){
this.senha = se;
}

public String verificarUsuario(){
if(Utilidades.isUsuarioValido(nome, senha))
return "sucesso";
else
return "erro";
}
}
[quote]

Enquanto estava trabalhando somente com servlet e jsp, a classe bean não implementava nenhuma ação, somente era um objeto que representava os dados do programa. Mas agora com JSF em todos os exemplos, a classe bean sempre implementa uma ação.

Não deveria ter uma classe responsável pelas requisições e pelo controle da aplicação ? A classe bean implementando uma ação não perderia as característica de uma aplicação em três camadas ?

Se alguém puder me esclarecer eu agradeço.

11 Respostas

maurenginaldo

A classe "Bean" que, quando vc utiliza hibernate pode-se chamar classe de entidade, ou em outras sistuações classe de domíno continua existindo da mesma forma. O que o pessoal implementa no Jsf é uma classe para gerenciar esse "Bean". Essa classe pode ser conhecida como ManagedBean ou Controlador.
Essa classe que vai ajudar vc a gerenciar a sua tela tem como um de seus atributos o seu Bean, por exemplo:

public class UsuarioManagedBean{

      private UsuarioBean usuario;
   
      public UsuarioManagedBean{}

      //get e set do usuario e as ações
}
renan_

Pois é efcjunior,

existem varios exemplos de JSF na internet que fogem do conceito do framework, que é MVC !!

Esse bean é o model da aplicação. Nao deve conter ações. Aliás, o seu codigo jsp deve-se apenas fazer referencia aos controllers. Esses sim contem as açoes.

Um exemplo correto do uso do JavaServer Faces:

package model;

public class UsuarioBean{
    private String nome;
    private String senha;

    public String getNome(){
         return this.nome;
    }
 
    public void setNome(String nome){
         this.nome = nome;
    }

    public String getSenha(){
        return this.senha;
    }

    public void setSenha(String senha){
        this.senha = senha;
    }

Agora o controller , que será o managed-bean no faces-config.xml:

package controller;

import model.*;

public class UsuarioController{
     private UsuarioBean usuario;

     public UsuarioBean getUsuario(){
            return this.usuario;
 
     public void setUsuario(UsuarioBean usuario){
            this.usuario = usuario;
     }

    public String verificarUsuario(){
            if(Utilidades.isUsuarioValido(this.usuario.nome, this.usuario.senha))
                return "sucesso";
            else
                return "erro";
     }
}

Assim é a forma correta de utilizar JavaServer Faces e qualquer outro framework MVC.

Att,

Renan

C

nananinanão…o bean deve chamar o VO,e o controle chamar o Bean
apesar de vc ter usado de forma correta,a nomenclatura ta errada…
o seu UsuarioBean na verdade é Usuario, e o o seu UsuarioController deveria ser o Bean…Controller eu faria como implementações avançadas que utiliza os beans…
pelo fato do Bean poder usar elementos da visao, como UIInput e sei la o que, ele não é o controle…o Controle é responsável por tratar os dados do Banco e nao o Bean, senao vira MV hehehehehe

C

na arquitetura MVC
, o JSF seria assim

View <—> Bean <----> Controle <----> Interface de Dados (Dao, ou seja la o que for)
^
|

VO
DirceuSobrinho

Eu implemento a ação conforme a Carla falou

class Usuario{

 private Long id;
 private String nome;
 private String senha;
 ...

}
class UsuarioBean{

 private Usuario usuario;
 private UsuarioDAO usuarioDAO;

 public String cadastra(){
   usuarioDAO.salvar(usuario);
   return "sucesso";
 }

 public String verifica(){ ... }

 public String remove(){ ... }

 ...

}
Leozin

Olá

Gostaria de saber porque a galera acha que criam/brincam com “Controllers” quando usam Struts ou JSF

O que seriam Controller pra você(s)? alguma classe que o “model” chama? pelo menos é o que eu to achando que vocês estão dizendo OU há alguma falha de nomenclatura nas classes de vocês (ou eu estou enganado)

renan_

A questão da nomenclatura a carla tem razão.

No meu exemplo , a classe UsuarioBean deveria se chamar Usuario.java apenas.

Quanto ao meu controller, aquilo É um controller de acordo com a definição…

Beans tem apenas seus atributos e seus respectivos getters e setters!
Carla, está dizendo que o Bean teria a acao verificaUsuario() ?? Nao creo que isso seja correto. O jsp deve-se comunicar apenas com o controller, esse sim tem a ação.

Se entendi bem, de acordo com o que voce pensa, o model é o Usuario.java , o UsuarioBean.java teria apenas um atributo do tipo Usuario e seus getters e setters e o controller a ação de verificarUsuario() ??

Uma coisa eu sei, o controller contem as acoes! Observe a estrutura de ruby on rails… Model, view, controller … Nao tem bean por aih nao… Controller instancia um model e contem acoes e logicas de negocios. Foi isso que li em varios lugares.

Att,

Renan

L

Nunca vi tanta besteira sendo dita ao mesmo tempo. Dizer que o Controller contém as ações e o Model contém os getters e setters é ingenuidade, baseada em interpretações equivocadas da Arquitetura em Camadas.

O View ninguém questiona o que é. Na web, são as páginas jsp.

O Controller é apenas uma camada fina da sua aplicação que é chamado quando ocorre um evento na View, simples assim. As ações que ele possui deve apenas delegar para outras classes pertencentes ao Model.

O Model contém os atributos e as ações (sim, os dois não são separados) e é agnóstico à interface. Ele é tudo que não é View e nem Controller.

Portanto, o ManagedBean é o seu Controller, as ações servem para invocar algum método pertencente ao Model, e os getters e setters servem para transportar beans da View pro Model e vice-versa. Tentar encaixar o managed bean ao bean clássico (que é uma idiotice usá-lo em qualquer contexto) não se aplica.

Leozin

Leonardo3001:
Nunca vi tanta besteira sendo dita ao mesmo tempo. Dizer que o Controller contém as ações e o Model contém os getters e setters é ingenuidade, baseada em interpretações equivocadas da Arquitetura em Camadas.

O View ninguém questiona o que é. Na web, são as páginas jsp.

O Controller é apenas uma camada fina da sua aplicação que é chamado quando ocorre um evento na View, simples assim. As ações que ele possui deve apenas delegar para outras classes pertencentes ao Model.

O Model contém os atributos e as ações (sim, os dois não são separados) e é agnóstico à interface. Ele é tudo que não é View e nem Controller.

Portanto, o ManagedBean é o seu Controller, as ações servem para invocar algum método pertencente ao Model, e os getters e setters servem para transportar beans da View pro Model e vice-versa. Tentar encaixar o managed bean ao bean clássico (que é uma idiotice usá-lo em qualquer contexto) não se aplica.

Cara, na minha humilde opinião, tu conseguiu viajar mais ainda

O que é, pra você, o ActionServlet ou o FacesServlet?

renan_

Caro Leonardo, não vou acreditar em você de cara sobre o controller. Porem o que voce disse me alerta para pesquisar mais.

De fato, encaixar o managed bean ao bean classico nao faz sentido algum realmente. Assim como tinha dito antes.

Leonardo, entre o managed-bean (controller) e o modelo(que voce diz conter tambem as acoes, eu discordo… ) existe um BEAN, assim como a carla disse ?

Att,

Renan

C

quem implementa as açoes é o Controle, o Bean chama as açoes do controle…
pra mim fazer o Bean tratar os dados é bizarro demais…
o Bean nao deixa ter controle, pois ele tambem implementa metodos relacionados ao fluxo de páginas e tal, mas controle é importante, senao aparece aqueles códigos estranhos ocm CadastroUsuarioBean, RemocaoUsuarioBean…
Um sistema pequeno pode ate ter so o Bean sem o Controle, mas acho que num sistema com muita regra de negócio, fica complicado tratar…

Criado 28 de fevereiro de 2008
Ultima resposta 28 de fev. de 2008
Respostas 11
Participantes 7