SelectOneMenu dinâmico
Olá pessoal,
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:
- Inseri o método get:
- Na página CadastrarCliente.xhtml coloquei desta forma:
Só que quando acesso a página e clico no componente, as profissões não aparecem. Onde estou errando?
Grata.
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
Curtidas 0
Respostas
Randrade
19/01/2015
Você esta usando algum Framework de persistência de dados?
Não estou vendo você retornar os dados do banco para preencher esta lista.
Algo do tipo:
Não estou vendo você retornar os dados do banco para preencher esta lista.
Algo do tipo:
List<Profissao> listaProfissoes= daoProfissoes.listar();
GOSTEI 0
Sgrandini
19/01/2015
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.
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?
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
Ronaldo Lanhellas
19/01/2015
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.
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?
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
Ronaldo Lanhellas
19/01/2015
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