5
respostas

Galera duvida com uma lista e com o xhtml

Boa tarde vou dar um exemplo na minha duvida, Vou ter minha classe Cliente, nela terei atributos e depois vou ter um atributo do tipo List< Endereco> depois vou criar uma outra classe para o meu endereço e com seus atributos. Aqui na Classe vou ter um metodo parecido com esse. Não estou com minha ferramenta então se nos metodos tiver erro de sintaxe ignore.

    private Cliente cliente = new Cliente();
    private Endereco endereco= new Enderco();
    // Gettrs e setters necessario.

    public void adicionar() {
        new DAO<Usuario>(Usuario.class).adicionar(this.usuario);
    }

E no meu xhtml do Cliente terei um os meus inputs e outputs. Exemplo.

<p:outPutLabel value="nome" for"nome" />
    <p:inputText id="nome" action"#{clienteController.cliente.nome}"/>
    <p:outPutLabel value="RG" for"rg" />
    <p:inputText id="rg" action"#{clienteController.cliente.rg}"/>

Agora quero mostrar dados para adicionar dados do meu endereço irei ter algo parecido com isso

<p:outPutLabel value="nome" for"nome" />
    <p:inputText id="nome" action"#{clienteController.cliente.nome}"/>
    <p:outPutLabel value="RG" for"rg" />
    <p:inputText id="rg" action"#{clienteController.cliente.rg}"/>
    <p:outPutLabel value="cidade" for"cidade" />
    <p:inputText id="cidade" action"#{clienteController.endereco.cidade}"/>

Agora vem minha duvida, tenho um cliente e o cliente esta ligado em um endereço, na minha cidade como no exemplo ali encima está correto em chamar o clienteController.endereco.cidade? Ou seria exato eu fazer a ligação direto com o EnderecoController.endereco.cidade? Qual maneira é a correta? e no meu metodo adicionar como ficaria sendo que eu queria gravar um cliente e o seu endereço? Seria algo aparecido com esse codigo?

public void adicionar() {
        new DAO<Usuario>(Usuario.class).adicionar(this.usuario);
        new DAO<Endereco>(Endereco.class).adicionar(this.endereco);
}

Está correto assim? Ou deveria fazer um adicionar no endereco também? só que nao faz sentido né? porque queria adicionar um cliente e seu endereço juntos. Como fazer?

5 respostas

Para mim, ter tudo em um controller faz sentido sim, dado que é uma operação só. Em relação ao método adicionar na classe Usuario, eu acho exagerado. Chamaria do seu ManagedBean mesmo.

Alberto então eu teria um um controller para todas classe que faz relação com o banco de dados? você viu o meu exemplo ali encima? então no metodo adiciona na classe Usuario ficaria como para mim adicinar o meu Cliente (Na minha informação passei usuario mais era o cliente kkk) como vocês programadores experientes fazem essa parte? adicionar o seu Cliente e Endereço? tem um exemplo? obg

O controller ta relacionado as funcionalidades da sua página, não tem nem nenhum vinculo com o seu banco de dados. Eu teria o ClienteController com o método adiciona, que relacionaria o usuário e o endereço vindo do formulário... Pegaria esse objeto e salvaria como o meu UsuarioDao. E como não existe endereço sem Usuario, ainda deixaria um cascade no endereco.. em geral eu não sou a favor de cascades, mas nesse caso me parece pertinente.

Alberto quis dizer que a classes que estiverem com a anotação Entity quase sempre vão ter um Controller para sua funçoes. Relação entre Cliente e Endereco você fala na hora de definir os atributos correto?

    public Class Cliente() {
        //
    @OneToMany
    private List<Endereco> enderecos = new ArrayList<Endereco>();
    }

Essa seria a relação que você acabo de dizer?E você pegaria o objeto e salvaria correto? Mais esse objeto ja iria ter um o dados do cliente e endereco?

public class ClienteController() {
    private Cliente cliente = new Cliente();
    private Cliente endereco= new Endereco();
}

public void adicionar() {
    Aqui basta pegar só o cliente? ou o endereco tbm?
    por exemplo
    new DAO<Cliente>(Cliente.class).adiciona(cliente);
    assim? ou assim
    new DAO<Endereco>(Endereco.class).adiciona(endereco);

}
Algo parecido com isso?

E alberto cascade é só quando você tem mais de uma classe né? por isso usar correto? Para mim poder usar o cascade era através de anotação? você tem um exemplo para poder usar? obrigado