Fórum SelectOneMenu dinâmico #507799
19/01/2015
0
Preciso exibir em um SelectOneMenu, de uma página de cadastro, todas as profissões gravadas no banco. Trata-se de uma página de cadastro de clientes que tem este componente disponível para o usuário selecionar uma profissão para um cliente. Como meu conhecimento em Java é bem superficial, estou tendo dificuldades em conseguir isso.
Fiz o seguinte:
- Criei uma lista de profissões na classe ClienteBean:
private List<Profissao> listaProfissoes;
- Inseri o método get:
public List<Profissao> getListaProfissoes() {
return listaProfissoes;
}
- Na página CadastrarCliente.xhtml coloquei desta forma:
<h:outputText value="Profissão: " />
<p:selectOneMenu id="profissao" styleClass="profissao" value="#{clienteBean.cliente.profissao.codigo}">
<f:selectItem itemLabel="Selecione a profissão" itemValue="" />
<f:selectItems value="#{clienteBean.listaProfissoes}" var="p" itemLabel="#{p.descricao}" itemValue="#{p.codigo}" />
</p:selectOneMenu>
Só que quando acesso a página e clico no componente, as profissões não aparecem. Onde estou errando?
Grata.
Sgrandini
Curtir tópico
+ 0Posts
20/01/2015
Randrade
Não estou vendo você retornar os dados do banco para preencher esta lista.
Algo do tipo:
List<Profissao> listaProfissoes= daoProfissoes.listar();
Gostei + 0
20/01/2015
Sgrandini
Estou usando o Hibernate.
De fato, não criei classe DAO para Profissão. Mas a minha grande dúvida é onde criar esta classe. Por exemplo, minha classe ClienteDAO é uma interface e a implementação do método listar é feita em ClienteDAOHibernate.
public interface ClienteDAO {
public void salvar(Cliente cliente);
public void atualizar(Cliente cliente);
public Cliente carregar(Integer codigo);
public List<Cliente> listar();
}
public class ClienteDAOHibernate implements ClienteDAO {
private Session sessao;
public void setSessao(Session sessao) {
this.sessao = sessao;
}
@Override
public void salvar(Cliente c) {
this.sessao.save(c);
}
@Override
public void atualizar(Cliente c) {
this.sessao.update(c);
}
@Override
public Cliente carregar(Integer codigo) {
return (Cliente) this.sessao.get(Cliente.class, codigo);
}
@SuppressWarnings("unchecked")
@Override
public List<Cliente> listar() {
return this.sessao.createCriteria(Cliente.class).list();
}
}
Devo criar então o método listar de Profissao dentro de ClienteDAO e ClienteDAOHibernate para ter acesso a lista de profissões na tela de cadastro de cliente ou crio as classes DAO especificamente para Profissao?
Gostei + 0
21/01/2015
Ronaldo Lanhellas
Estou usando o Hibernate.
De fato, não criei classe DAO para Profissão. Mas a minha grande dúvida é onde criar esta classe. Por exemplo, minha classe ClienteDAO é uma interface e a implementação do método listar é feita em ClienteDAOHibernate.
public interface ClienteDAO {
public void salvar(Cliente cliente);
public void atualizar(Cliente cliente);
public Cliente carregar(Integer codigo);
public List<Cliente> listar();
}
public class ClienteDAOHibernate implements ClienteDAO {
private Session sessao;
public void setSessao(Session sessao) {
this.sessao = sessao;
}
@Override
public void salvar(Cliente c) {
this.sessao.save(c);
}
@Override
public void atualizar(Cliente c) {
this.sessao.update(c);
}
@Override
public Cliente carregar(Integer codigo) {
return (Cliente) this.sessao.get(Cliente.class, codigo);
}
@SuppressWarnings("unchecked")
@Override
public List<Cliente> listar() {
return this.sessao.createCriteria(Cliente.class).list();
}
}
Devo criar então o método listar de Profissao dentro de ClienteDAO e ClienteDAOHibernate para ter acesso a lista de profissões na tela de cadastro de cliente ou crio as classes DAO especificamente para Profissao?
Do jeito que você está trabalhando o ideal é criar um ProfissaoDAO para buscar as profissões, porém o ideal seria você mudar sua estratégia para criar um DAO Genérico, capaz de buscar qualquer coisa e não apenas profissão ou cliente.
Gostei + 0
21/01/2015
Ronaldo Lanhellas
Randrade,
Estou usando o Hibernate.
De fato, não criei classe DAO para Profissão. Mas a minha grande dúvida é onde criar esta classe. Por exemplo, minha classe ClienteDAO é uma interface e a implementação do método listar é feita em ClienteDAOHibernate.
#Código
1
2
3
4
5
6
public interface ClienteDAO {
public void salvar(Cliente cliente);
public void atualizar(Cliente cliente);
public Cliente carregar(Integer codigo);
public List<Cliente> listar();
}
#Código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class ClienteDAOHibernate implements ClienteDAO {
private Session sessao;
public void setSessao(Session sessao) {
this.sessao = sessao;
}
@Override
public void salvar(Cliente c) {
this.sessao.save(c);
}
@Override
public void atualizar(Cliente c) {
this.sessao.update(c);
}
@Override
public Cliente carregar(Integer codigo) {
return (Cliente) this.sessao.get(Cliente.class, codigo);
}
@SuppressWarnings("unchecked")
@Override
public List<Cliente> listar() {
return this.sessao.createCriteria(Cliente.class).list();
}
}
Devo criar então o método listar de Profissao dentro de ClienteDAO e ClienteDAOHibernate para ter acesso a lista de profissões na tela de cadastro de cliente ou crio as classes DAO especificamente para Profissao?
Do jeito que você está trabalhando o ideal é criar um ProfissaoDAO para buscar as profissões, porém o ideal seria você mudar sua estratégia para criar um DAO Genérico, capaz de buscar qualquer coisa e não apenas profissão ou cliente.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)