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!!!