javasf@googlegroups.com
[Top] [All Lists]

[javasf] Re: Tipos Genéricos em ManagedBean do JSF 2.0

Subject: [javasf] Re: Tipos Genéricos em ManagedBean do JSF 2.0
From: Lindoélio Lázaro
Date: Mon, 18 Apr 2011 06:42:05 -0700 PDT
Fávio, o clienteCMS não está nulo, só o objeto entidade mesmo (que vem
do Controller abstrato). Com RequestScoped não muda absolutamente
nada.
No momento, não tenho como olhar qual o pacote, porque não estou com o
projeto aqui; mas qual a diferença na implementação da ViewScoped do
pacote javax.enterprise e a do javax.faces.bean?

Agradeço.

On Apr 18, 8:53 am, Flavio Cysne <flaviocy...@xxxxxxxxx> wrote:
> Lindoélio,
>
>     verifique se, na página, o próprio clienteCMS está nulo. O ViewScoped
> que está usando é do pacote javax.enterprise ou do javax.faces.bean ? Já
> tentou com o RequestScoped ?
>
> Atenciosamente,
> Flávio Cysne
>
> Em 17 de abril de 2011 21:33, Lindoélio Lázaro <lindoe...@xxxxxxxxx>escreveu:
>
>
>
>
>
>
>
> > Caros, ainda não consegui. Implementei o newInstance no meu Controller
> > abstrato, mas continua na mesma.
>
> > Segue trechos do código para entenderemo melhor meu problema...
> > =======================================
> > Classe Controller...
> > ...
> > private T entidade;
> > private DAO<T> dao;
> > private DataModel dataModel;
> > ...
> >    public T getEntidade() {
> >        if (entidade == null) {
> >            entidade = newInstance();
> >        }
> >        return entidade;
> >    }
>
> >    public void setEntidade(T entidade) {
> >        this.entidade = entidade;
> >    }
> > =======================================
> > Classe ClienteController...
> > ...
> > @ManagedBean(name="clienteCMS")
> > @ViewScoped
> > public class ClienteController extends Controller<Cliente> {
> > ...
> >    public ClienteController() {
> >        super.setDao(new ClienteDAO());
> >    }
> > =======================================
> > Página *.xhtml de cadastro do cliente...
> > ...
> > <h:inputText id="nomeCliente" value="#{clienteCMS.entidade.nome}" />
> > =======================================
>
> > Isso com JSF 1.2 funciona perfeitamente! Tenho uma aplicação em
> > produção com essa arquitetura em JSF 1.2.
> > No JSF 2.0 esse objeto "entidade" está sempre vazio. Já não sei mais o
> > que fazer.
>
> > Agradeço qualquer ajuda!
>
> > On Apr 16, 2:54 am, André Berenguel <andre.bereng...@xxxxxxxxx> wrote:
> > > A solução que o flávio postou é o Template Method pattern.. um pattern
> > muito
> > > útil..
>
> > > Eu uso uma solução um pouco diferente:
>
> > > //Controller.java
> > > public abstract class Controller<T> {
> > >     ...
> > >    private T modelo;
> > >    Class<T> clazz;
>
> > >    public Controller(Class<T> clazz)
> > >    {
> > >        this.clazz = clazz;
> > >     }
>
> > > public T getModelo() {
> > >     if (modelo == null) {
> > >        try {
> > >         modelo = clazz.newInstance();
> > >        } catch (Exception e) {
> > >          }
> > >     }
> > >     return modelo;
> > >    }
>
> > > }
>
> > > //PessoaController.java
> > > public class PessoaController extends Controller<Pessoa> {
>
> > >     public PessoaController () {
> > >           super(Pessoa.class)
> > >     }}
>
> > > --
> > > André Berenguel
>
> > > 2011/4/15 Flavio Cysne <flaviocy...@xxxxxxxxx>
>
> > > > Lindoélio,
>
> > > >     não sei se entendi certo, mas você tem uma propriedade no seu
> > > > Controller chamada modelo e ela está sempre vindo nula? Se for, uma
> > maneira
> > > > de resolver isso é, antes de retornar o modelo no método get, você
> > verificar
> > > > se ele é nulo e, caso seja, chamar um método, que deverá ser
> > implementado
> > > > pelas subclasses, que retorne uma instância válida deste modelo. Tipo
> > assim:
>
> > > > //Controller.java
> > > > ...
> > > > private T modelo;
> > > > public T getModelo() {
> > > >     if (modelo == null) {
> > > >         modelo = newInstance();
> > > >     }
> > > >     return modelo;
> > > > }
> > > > ...
> > > > protected abstract T newInstance();
> > > > ...
>
> > > > //PessoaController.java
> > > > public class PessoaController extends Controller<Pessoa> {
> > > > ...
> > > > protected Pessoa newInstance() {
> > > >     return new Pessoa();
> > > > }
> > > > ...
> > > > }
>
> > > > Espero ter ajudado.
> > > > Flávio Cysne
>
> > > > Em 15 de abril de 2011 14:50, Lindoélio Lázaro <lindoe...@xxxxxxxxx
> > >escreveu:
>
> > > > Olá, pessoal! Ao migrar minha aplicação de JSF 1.2 para JSF 2.0 tenho
> > > >> encontrado muitas dificuldades. Uma delas é quanto a utilização de
> > > >> tipos "Generic", que uso muito para fazer reflexão e Superclasses
> > > >> "Genéricas", como DAO e Controller, por exemplo.
> > > >> Para entenderem melhor o meu problema atual, vou explicar um pouco de
> > > >> como faço uso dessas classes genéricas na minha aplicação:
>
> > > >> Tenho uma Superclasse que chamo carinhosamente de "Controller". Essa
> > > >> superclasse faz reflexão com base em um tipo Generic (Controller<T>) e
> > > >> contém alguns métodos protected para integração com o banco de dados;
> > > >> de forma que para obter as funcionalidades de controle para Inclusão,
> > > >> Alteração, Exclusão, Listagem simples e outras, basta extender essa
> > > >> classe em uma subclasse, passando o tipo "T", que representa uma
> > > >> classe de modelo, com mapeamentos Hibernate. A Superclasse DAO<E>
> > > >> segue a mesma estrutura, só que ao invés do Generic T uso o E.
>
> > > >> Bom, vamos ao problema (que deve ser de resolução muito simples e
> > > >> causar risadas aos precoces gurus do JSF 2.0, rs). O objeto modelo
> > > >> está sempre nulo quando vou utilizar na view (NullPointException), não
> > > >> importando qual o escopo estiver usando. Tentei usar a anotação
> > > >> @ManagedProperties, imaginando que poderia ser pela dependência, mas
> > > >> sem sucesso.
> > > >> Alguém tem ideia do que estou fazendo de errado?
>
> > > >> Obrigado!
>
> > > >> --
> > > >> Você recebeu esta mensagem por que é membro do  Javasf
> > > >>http://groups.google.com/group/javasf
>
> > > >> Conheça também o Java Brazil:
> > > >>http://groups.google.com/group/thejavabrazil
>
> > > >  --
> > > > Você recebeu esta mensagem por que é membro do Javasf
> > > >http://groups.google.com/group/javasf
>
> > > > Conheça também o Java Brazil:
> >http://groups.google.com/group/thejavabrazil
>
> > --
> > Você recebeu esta mensagem por que é membro do  Javasf
> >http://groups.google.com/group/javasf
>
> > Conheça também o Java Brazil:http://groups.google.com/group/thejavabrazil

-- 
Você recebeu esta mensagem por que é membro do  Javasf
http://groups.google.com/group/javasf

Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil

<Prev in Thread] Current Thread [Next in Thread>