SelectOneMenu em Cascata

3 respostas
marco_andre

Pessoal, estou desenvolvendo uma aplicação web com JSF + ICEFaces.

Em uma tela, tenho 4 combo box, sendo os 3 últimos funcionam em cascata (é preciso modificar o primeiro, para o valor aparecer “filtrado” nos outros).

3 desses combos estão associados a eventos para ocorrer a troca dos valores.

Eu tenho essa classe no meu manager bean para fazer essa troca de valores:

public class ListenerComboOnChange implements ValueChangeListener {

        public void processValueChange(ValueChangeEvent pEvent) throws AbortProcessingException {

           
                if (Util.isNotNullOrEmpty(pEvent.getNewValue())) {
                    //Verificar se o combo alterado é o de Entrância ou de Comarca
                    
                    if (pEvent.getComponent().getId().equals("comboUnidadePai")) {
                        mudarUnidadePai(pEvent);
                    }
                    else {
                        if (pEvent.getComponent().getId().equals("comboEntrancia")) {
                            mudarEntrancia(pEvent);
                        }
                        else {
                            if (pEvent.getComponent().getId().equals("comboComarca")) {
                                mudarComarca(pEvent);
                            }
                            else {
                                return;

O que acontece de errado é o seguinte:

Quando eu seleciono o primeiro combo (unidade pai), ele entra em todos os if´s, ou seja, ele primeiro o id correto, mas depois adquire tb os outros, e vai entrando um por um.

Quando eu seleciono o segundo combo (entrancia), ele adquire o primeiro id (comboUnidadePai). entra no primeiro if, depois adquire os outros id´s tb.

Já li alguns tópicos sobre o assunto, mas não consegui implementar nenhuma solução que fizesso isso funcionar corretamente.

Se alguém tiver alguma ideia do que está acontecendo, por favor poste ai.

3 Respostas

alves.Felipe

vc pode usar o rerender apontando para o próximo… acho que isso resolveria seu problema…
por exemplo:
perder o foco do combo 1, então reRender=“combo2”, aqui vc usa ajax para obter os valores e fazer sua lógica…
perder o foco do combo 2, então reRender=“combo3”…

marco_andre

Fiz uma pesquisa sobre a utilização do reRender pelo ICEFaces e descobri que ele não trabalha dessa forma.

Mais informação aqui: http://www.icefaces.org/JForum/posts/list/6737.page

Ele trabalha assim: http://www.icefaces.org/docs/v1_8_2/htmlguide/devguide/keyConceptsa2.html#996468

Vou estudar isso aqui, pra ver se resolve meu problema.

marco_andre

Olá de novo,

Ainda estou tendo o mesmo problema, já tentei utilizar o reRender no IceFaces, mas parece que ele não possui essa funcionalidade.

Vou postar o código dos comboBox´s para ver se ajuda:

<ice:selectOneMenu binding="#{UnidadeMB.comboUnidadePaiCadastro}" value="#{UnidadeMB.unidade.idUnidade}" partialSubmit="false" id="comboUnidadePaiCadastro"> <f:selectItems value="#{UnidadeMB.selectItemUnidadePai}" /> </ice:selectOneMenu>

<!--  Combo Entrâncias -->

<ice:selectOneMenu binding="#{UnidadeMB.comboEntranciasCadastro}"
       value="#{UnidadeMB.unidade.distrito.comarca.entrancia.idEntrancia}" partialSubmit="false" id="comboEntranciaCadastro">
       <f:selectItems value="#{UnidadeMB.selectItemEntrancias}" />
</ice:selectOneMenu>

<!--  Combo Comarcas -->
<ice:outputLabel binding="#{UnidadeMB.labelComarcaCadastro}" />

<ice:selectOneMenu binding="#{UnidadeMB.comboComarcasCadastro}" partialSubmit="false"
        value="#{UnidadeMB.unidade.distrito.comarca.idComarca}" id="comboComarcaCadastro">
        <f:selectItems value="#{UnidadeMB.selectItemComarcas}" />
</ice:selectOneMenu>


<!--  Combo Distritos -->

<ice:outputLabel binding="#{UnidadeMB.labelDistritoCadastro}" />

<ice:selectOneMenu binding="#{UnidadeMB.comboDistritosCadastro}" value="#{UnidadeMB.unidade.distrito.idDistrito}">
       <f:selectItems value="#{UnidadeMB.selectItemDistritos}" />
</ice:selectOneMenu>

Preciso muito fazer com que o evento de um não interfira no outro. Quem tiver alguma ideia do que está acontecendo, por favor, poste ai.

Criado 26 de maio de 2010
Ultima resposta 31 de mai. de 2010
Respostas 3
Participantes 2