Problema com <h:selectOneMenu> + <a4j:support>

Seguinte,
Eu tenho 3 combobox, uma com Ramo, outra com Cidade, e outra com Cargo.
A combobox de Cargo é preenchida de acordo com o Ramo E a Cidade.
Quando eu seleciono nessa ordem (Ramo, Cidade, Cargo) ele preenche a combobox de Cargo corretamente, porem em algumas sequências (Ramo, Cidade, Cargo, Ramo, Cargo), por exemplo, ele dá este erro:

root cause

java.util.NoSuchElementException
javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:119)
javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:146)
javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:51)
javax.faces.component.UISelectOne.matchValue(UISelectOne.java:165)
javax.faces.component.UISelectOne.validateValue(UISelectOne.java:137)
javax.faces.component.UIInput.validate(UIInput.java:875)
javax.faces.component.UIInput.executeValidate(UIInput.java:1078)
javax.faces.component.UIInput.processValidators(UIInput.java:670)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
javax.faces.component.UIForm.processValidators(UIForm.java:229)
org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:434)
org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:234)
org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:450)
com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:266)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:132)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:147)
org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:256)
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:362)
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:488)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

Segue abaixo o trecho do código com as combobox:

<p>SALÁRIOS CADASTRADOS</p>

<h:outputText value="Selecione os itens abaixo e clique em LISTAR."/><br>

<h:panelGrid cellpadding="5px" cellspacing="10px" columns="2">

    <h:selectOneMenu id="ramoSelecionado" immediate="true" value="#{cargoC.ramoID}" valueChangeListener="#{cargoC.valueChangeRamo}">
        <f:selectItem itemLabel="Escolha o ramo..." itemValue="0"/>
        <f:selectItems value="#{ramoC.ramosItems}"/>
        <a4j:support event="onchange" reRender="cargoSelecionado"/>
    </h:selectOneMenu>

    <h:selectOneMenu id="cidadeSelecionada" immediate="true" value="#{cargoC.cidadeID}" valueChangeListener="#{cargoC.valueChangeCidade}">
        <f:selectItem itemLabel="Escolha a cidade..." itemValue="0"/>
        <f:selectItems value="#{cidadeC.cidadeItems}" />
        <a4j:support event="onchange" reRender="cargoSelecionado"/>
    </h:selectOneMenu>

    <h:selectOneMenu id="cargoSelecionado" value="#{salProvisorioC.cargoID}" valueChangeListener="#{salProvisorioC.valueChangeSalarioProvisoriosFromCargoId}">
        <f:selectItem itemLabel="Escolha o cargo..." itemValue="0"/>
        <f:selectItems value="#{cargoC.cargoItems}" />
        <a4j:support event="onchange" reRender="listaSalarios"/>
    </h:selectOneMenu>

</h:panelGrid>

Estou usando request, e os valueChange estão sendo usados para setar valores nos beans que são usados para preencher as combobox
O listaSalarios (que está em negrito) é uma rich:dataTable que é renderizada caso haja salários para o Ramo, Cidade e Cargo selecionados…

Obrigado!!!

provavelmente no seu select você está usando somente a cidade como restrição de pesquisa. Coloca tambem como restrição o Ramo e a Cidade efetuado uma verificação nesse select.
qualque coisa coloca ai seu select para ajudarmos.

Como assim restrição de pesquisa? O select que vc quer dizer é o select do banco?

No banco funciona da seguinte maneira. Eu busco o cargo de acordo com o ramo e a cidade, e depois, ao selecionar o cargo, ele me mostra um rich:dataTable (que é a lista de salários para o cargo selecionado)… Portanto creio que o select não tem problemas…

Acho que descobri o que pode ser o problema, só não sei qual a melhor solução…

Por exemplo, se eu executar a sequencia:

Ramo, Cidade, Cargo, Ramo, Cidade, Cargo --> Assim não dá erro

Ramo, Cidade, Cargo, Ramo, Cargo --> Assim dá erro

O que acontece é que quando eu seleciono o Cargo novamente, somente o Ramo está setado no bean,
portanto a cidade está como null e não é possível pegar o cargo. (lembrando… ACHO QUE PODE SER ISSO)

tem alguma maneira de manter o estado do bean anterior?

só se você deixar como session em vez de request no faces-config. Mais ainda acho que não é a solução… posso estar errado.

coloca ai seu Select pra mim ver…

Pois é cara… se eu deixar session ele vai atrapalhar outras partes que utilizam o Bean Cargo.

Eu to usando JPA. O select do banco é assim:
@NamedQuery(name = “buscaCargoPorRamoECidade”, query=“SELECT c FROM Cargo c WHERE c.ramo = :ramo” +
" AND c.cidade = :cidade")

Tá tenso viu! eheheh