Opa, desculpa a demora…
mas atualmente não estou usando nenhuma das bibliotecas de componentes não, ( por conta de ainda não precisar no projeto mesmo, nada contra… é provavel que logo venha a usar Richfaces )
Na verdade eu cheguei a fazer esse probleminha que eu queria, mas cheguei a um outro problema que deve ser bobo.
Tipo, como citei eu tenho 2 SELECT e os dados do 2o depende do valor selecionado do 1o.
[CIDADE]
[UNIDADES4CIDADE]
no .jsp eu fiz:
<f:view>
<h:form>
<p>
<h:outputLabel for="cidade" value="Selecione a Cidade:"/>
<br>
<h:selectOneMenu id="cidade" value="#{sdeBean.cidade}" immediate="true" valueChangeListener="#{sdeBean.atualizarUnidadeOperacional}" onchange="submit()" >
<f:selectItems value="#{sdeBean.listaCidades}"/>
</h:selectOneMenu>
</p>
<p>
<h:outputLabel for="unidade" value="Selecione a Unidade Operacional:"/>
<br>
<h:selectOneMenu id="unidade" value="#{sdeBean.unidade}">
<f:selectItems value="#{sdeBean.listaUnidades}"/>
</h:selectOneMenu>
</p>
<p>
<h:commandButton action="#{sdeBean.gerarRelatorioEstatistico}" value="Consultar"/>
</p>
</h:form>
</f:view>
no meu Bean, eu faço:
// GET e SET
public int getCidade() {
return cidade;
}
public void setCidade(int cidade) {
this.cidade = cidade;
}
public int getUnidade() {
return unidade;
}
public void setUnidade(int unidade) {
this.unidade = unidade;
}
// CIDADES
public List<SelectItem> getListaCidades() {
listaCidades = obterListaCidades();
return listaCidades;
}
public void setListaCidades(List<SelectItem> listaCidades) {
this.listaCidades = listaCidades;
}
// UNIDADES
public List<SelectItem> getListaUnidades() {
listaUnidades = obterUnidadesOperacional(cidade);
return listaUnidades;
}
public void setListaUnidades(List<SelectItem> listaUnidades) {
this.listaUnidades = listaUnidades;
}
// TRATAR O EVENTO DE CIDADE
public void atualizarUnidadeOperacional(ValueChangeEvent event) {
UISelectOne select = (UISelectOne)event.getSource();
Integer cdCidade = (Integer) select.getValue();
List<SelectItem> list = obterUnidadesOperacional(cdCidade);
setListaUnidades(list);
}
// OBTER AS CIDADES
private List<SelectItem> obterListaCidades() {
BizCidadeSDE bizCidade = new BizCidadeSDE();
List<Hashtable> cidadesH = bizCidade.obterCidadesSDE(CDADMIN_DEFAULT);
List<SelectItem> list = new ArrayList<SelectItem>();
// Aqui eu Inicializo a 1a Cidade, do esse nome... é como se fosse um TODAS
SelectItem itemRegional = new SelectItem();
itemRegional.setValue(0);
itemRegional.setLabel("REGIONAL");
list.add(itemRegional);
for (Hashtable hashtableCidade : cidadesH) {
// obtendo os valores
Integer id = (Integer) hashtableCidade.get("codigoCidade");
String nome = (String) hashtableCidade.get("nome");
// criando um item
SelectItem item = new SelectItem();
item.setValue(id);
item.setLabel(nome);
// adicionando a lista
list.add(item);
}
return list;
}
// OBTER AS UNIDADES
private List<SelectItem> obterUnidadesOperacional(Integer cdCidade) {
List<SelectItem> lista = new ArrayList<SelectItem>();
Hashtable<Integer,List<Hashtable>> unidadesPorCidade = obterUnidadeOperacionalPorCidade();
List<Hashtable> unidades = unidadesPorCidade.get(cdCidade);
// CHECAR SE É REGIONAL
if (new Integer(0).equals(cdCidade)) {
SelectItem item = new SelectItem();
item.setValue(0);
item.setLabel("Todas");
lista.add(item);
} // NÃO POSSUI UNIDADES
else if (unidades == null) {
SelectItem itemEmpty = new SelectItem();
itemEmpty.setValue(0);
itemEmpty.setLabel("Não Possui Unidade Operacional");
lista.add(itemEmpty);
} // PREENCHER AS UNIDADES
else {
for(Hashtable h : unidades) {
Integer id = (Integer)h.get("codigoUnidadeOperacional");
String nome = (String)h.get("nome");
SelectItem item = new SelectItem();
item.setValue(id);
item.setLabel(nome);
lista.add(item);
}
}
return lista;
}
public String gerarRelatorioEstatistico() {
// METODOS DE GERAR O RELATORIO....
}
O galho é o Seguinte, a ação de eu selecionar a cidade e ele trazer as Unidades da mesma no outro combo ta acontecendo… , mas tem algo estranho, tipo, ao entrar ná página ele me daria os seguintes parametros selecionados
[REGIONAL]
[TODAS]
=>CONSULTAR
da forma que está ae se eu não alterar nenhum dos parametros ele vai e faz o relatório normalmente após clicar no CONSULTAR.
caso eu venha a alterar algum dos parametros
[FORTALEZA]
[UNIDADE 05]
=>CONSULTAR
quando eu clico em CONSULTAR, ele faz o que eu não consigo entender… ele não vai executar o relatório ( metodo gerarRelatorioEstatistico )
mas troca o meu parametro de UNIDADE para o valor TODOS
no caso do meu exemplo ele faria
[FORTALEZA]
[TODOS]
=>CONSULTAR
alguém sabe o que pode ser ?