Boa Tarde Galera. Posso utilizar o mesmo form(pagina) de cadastro para a consulta?
Para cadastrar esta tudo funcionando belezinha, mas quando clico em pesquisar (load.(id)) o formulario e´preenchido , menos o combo que listas as cidades (q e´dependente do combo UFs):
Partes relevantes do MBean: [color=darkblue](ae galera e´bean de novato :oops: judia muito nao em)[/color]
/** preenche combo com nomes de estados */
public List<SelectItem> getPopulaEstados() {
List<SelectItem> listaestados = new ArrayList<SelectItem>();
Session session = HibernateUtil.currentSession();
Dao<TblEstados> edao = new Dao<TblEstados>(session, TblEstados.class);
List<TblEstados> cbxe = (List<TblEstados>) edao.listaTudo();
for (TblEstados bar : cbxe) {
SelectItem itens = new SelectItem(bar.getSigla(), bar.getEstado());
listaestados.add(itens);
}
return listaestados;
}
/** preenche combo com nomes de cidades com
* criterio uf vindo do combo estados */
private List<SelectItem> listacidades = new ArrayList<SelectItem>() ;
@SuppressWarnings("unchecked")
public List<SelectItem> getPopulaCidadesCond() {
List<SelectItem> listacidadescondicional = new ArrayList<SelectItem>();
Criteria ci = HibernateUtil.currentSession().createCriteria(TblCidades.class);
ci.add(Restrictions.ilike( "uf", estadoselecionado.getValue().toString() ));
List<TblCidades> cbxcc = ci.list();
for (TblCidades bar : cbxcc) {
SelectItem itens = new SelectItem(String.valueOf(bar.getPkCidades()),bar.getCidade());
listacidadescondicional.add(itens);
listacidades = listacidadescondicional;
}
return listacidadescondicional;
}
/** ligaçao entre combo estados e método para preencer combo cidades */
public HtmlSelectOneMenu estadoselecionado;
public HtmlSelectOneMenu getEstadoselecionado() {
return estadoselecionado;
}
/** pesquisa por um registro salvo na tabela certificados */
public void buscaCertificado(ActionEvent event) {
Session session = HibernateUtil.currentSession();
Dao<TblCertificados> certificadao = new Dao<TblCertificados>(session, TblCertificados.class);
this.certificados = certificadao.loadSring(certificados.getPkCertificado());
}
Sim, você pode sim! O ideal é que você utilize componentes que simulem subforms. Como você já se utiliza do Ajax4jsf você poderá simular isso com o componente a4j:region, restringindo assim o processamento do form a esta região.
Dá uma olhada na documentação do Richfaces e nos demos dele que poderão te ajudar!
Abraços e boa sorte.
A situação é a seguinte:
PostGreSql/Tomcat/MyFaces/a4j
Formulário de entrada de registro funcionando ok
Neste formulário um botão de pesquisa que através da chave primária carrega na tela um determinado registro. Todos os campos são trazidos corretamente, mas não o combo cidade, faz sentido tendo em vista que este último não está apontando para o campo na tabela do banco de dados.
Atualmente o combo cidade é preenchido da seguinte forma:
Combo cidades inicialmente aponta para uma lista vazia.
No combo estados utilizo o a4j:support que no evento onchange popula a lista que serve ao combo cidades e depois renderiza-o novamente para mostrar a lista atualizada.
Infelizmente até agora não consegui enteder como fazer com que a lista do combo cidades também receba um valor vindo da tabela no banco de dados após clicar no botão pesquisar.
Abaixo partes do código, mas se necessário posso postar tudo:
/** preenche combo com nomes de estados */
public List<SelectItem> getPopulaEstados() {
List<SelectItem> listaestados = new ArrayList<SelectItem>();
Session session = HibernateUtil.currentSession();
Dao<TblEstados> edao = new Dao<TblEstados>(session, TblEstados.class);
List<TblEstados> cbxe = (List<TblEstados>) edao.listaTudo();
for (TblEstados bar : cbxe) {
SelectItem itens = new SelectItem(bar.getSigla(), bar.getEstado());
listaestados.add(itens);
}
return listaestados;
}
/** preenche combo com nomes de cidades com
* criterio uf vindo do combo estados */
private List<SelectItem> listacidades = new ArrayList<SelectItem>() ;
@SuppressWarnings("unchecked")
public List<SelectItem> getPopulaCidadesCond() {
List<SelectItem> listacidadescondicional = new ArrayList<SelectItem>();
Criteria ci = HibernateUtil.currentSession().createCriteria(TblCidades.class);
ci.add(Restrictions.ilike( "uf", estadoselecionado.getValue().toString() ));
List<TblCidades> cbxcc = ci.list();
for (TblCidades bar : cbxcc) {
SelectItem itens = new SelectItem(String.valueOf(bar.getPkCidades()),bar.getCidade());
listacidadescondicional.add(itens);
listacidades = listacidadescondicional;
}
return listacidadescondicional;
}
/** ligaçao entre combo estados e método para preencer combo cidades */
public HtmlSelectOneMenu estadoselecionado;
public HtmlSelectOneMenu getEstadoselecionado() {
return estadoselecionado;
}
/** pesquisa por um registro salvo na tabela certificados */
public void buscaCertificado(ActionEvent event) {
Session session = HibernateUtil.currentSession();
Dao<TblCertificados> certificadao = new Dao<TblCertificados>(session, TblCertificados.class);
this.certificados = certificadao.loadSring(certificados.getPkCertificado());
}
O atributo value, value="#{Cer.cert.tblCidades}", deve ser referente ao valor na tabela, ou seja, ele deve estar populado com um valor válido na lista de opções da combo de cidade.
Resumindo: Se você quiser que um componente (selectOneMenu ou qualquer outro) já inicie na página setado com determinado valor/opção você precisa que seu managed bean já tenha o valor populado.
Poxa realmente não estou sabendo como explicitar meu problema…
[quote=rponte]
Resumindo: Se você quiser que um componente (selectOneMenu ou qualquer outro) já inicie na página setado com determinado valor/opção você precisa que seu managed bean já tenha o valor populado.[/quote]
Minha dúvida não é com relacao ao valor inicial do componente.
Se eu trouxer direto do banco de dados, terei uma lista gigantesca com todas as cidades existentes no Brasil!
Você não diria que isso é ruim ?
Por isso fiz o combo cidades dependente do combo estados, assim tenho uma lista consideravelmente menor para exibir.
Feito isto, surge então meu problema de como fazer para que o combo cidades tenha num determinando momento o valor vindo da consulta condicional e em outro momento o valor de um registro qualquer salvo que contenha referencia ao objeto cidade.
Grato pelo seu tempo.
[]´s
[quote]Se eu trouxer direto do banco de dados, terei uma lista gigantesca com todas as cidades existentes no Brasil!
Você não diria que isso é ruim ? [/quote]
Eu não sugeri isso, eu só aconselhei a utilizar a mesma idéia que utilizastes na combo de estado.
Agora que você conseguiu esclarecer teu problema acho que fica mais fácil ajudar
Uma busca rápida no GUJ e você encontra algumas threads com desenvolvedores com o mesmo problema, esta por exemplo o cara já te passa a solução http://www.guj.com.br/posts/list/77187.java
Esse é um problema bem comum, o pessoal se enrola mais não pela complexidade do problema, pois ele é bem simples, mas sim por não entender bem alguns conceitos com JSF e Ajax4jsf.
Espero que a thread acima te ajude, qualquer é só falar!
Desculpe, não foi minha intenção dizer que vc sugeriu daquela forma! :oops:
Eu realmente perguntei pq nao tenho idéia quais implicaçoes de se colocar aquela quantidade de informação num combo.
Ainda nao me fiz entender.
Eu ja passei por isto: http://www.guj.com.br/posts/list/77187.java.
Meu problema é outro!
Sério? Então o nosso (nós dois!) problema tem a ver com comunicação. Ou você não está sabendo explicar o teu problema ou eu por algum motivo não estou conseguindo entende-lo! :roll:
Que tal se voce utilizar o programa ? Talvez assim seja mais facil de entender o que acontece !
Se sim logo + te mando a url.
Novamente obrigado pelo seu tempo.
[]´s
Obrigadao rponte, nao foi utilizando o metodo get como vc havia sugerido, mas ajudou-me a encontrar forma alternativa.
Com a “vasta” experiência que tenho foi a melhor solução que pude programar.
Utilizei o método do botao buscar para o resultado que desejava.
[code] /** pesquisa por um registro salvo na tabela certificados */ @SuppressWarnings(“unchecked”)
public void buscaCertificado(ActionEvent event) {
Session session = HibernateUtil.currentSession();
Dao<TblCertificados> certificadao = new Dao<TblCertificados>(session, TblCertificados.class);
this.certificados = certificadao.loadSring(certificados.getPkCertificado());
List<SelectItem> listaumacidadecondicional = new ArrayList<SelectItem>();
Criteria ciu = HibernateUtil.currentSession().createCriteria(TblCidades.class);
ciu.add(Restrictions.ilike( "uf", certificados.getTblCidades().getUf() ));
List<TblCidades> cbxumacidade = ciu.list();
for (TblCidades bar : cbxumacidade) {
SelectItem itens = new SelectItem(String.valueOf(bar.getPkCidades()),bar.getCidade());
listaumacidadecondicional.add(itens);
listacidades = listaumacidadecondicional;
}
}[/code]