Problema com selectOneMenu

2 respostas
leo_mf

Olá colegas

Estou com um problema meio estranho.

Tenho uma página de cadastro de usuário no qual uso ajax do richfaces para popular um “selectOneMenu” de cidades após ter escolhido um estado. Nesta página tenho muitos campos que são de preenchimento obrigatório incluindo estes dois (estado e cidade). Quando mando submter, em que somente os campos (estado e cidade) estão preenchidos. é lançada uma pilha de exceptions.

<blockquote>javax.servlet.ServletException

javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)

org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)

org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)

org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)

org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)

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.UIForm.processValidators(UIForm.java:229)

org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:439)

org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:238)

org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:455)

com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100)

com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)

org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)

org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)

org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)

org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)

</blockquote>

Minha Página está assim:

. . . &lt;h:form&gt; . . . &lt;h:selectOneMenu id="estado" value="#{cadastro.estado}" binding="#{cadastro.htmlSelectOneMenu}"&gt; &lt;f:selectItems value="#{cadastro.selectEstadoOptions}" /&gt; &lt;a4j:support ajaxSingle="true" action="#{cadastro.seletedEstado}" event="onchange" reRender="cidade"/&gt; &lt;/h:selectOneMenu&gt; &lt;span&gt;&lt;h:message for="estado" styleClass="validateMessage"/&gt;&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="frm_label" width="194"&gt;<font >*</font>Cidade&lt;/td&gt; &lt;td class="frm_td_dados" id="td_cidade"&gt; &lt;h:selectOneMenu id="cidade" value="#{cadastro.cidade}" required="true" requiredMessage="Campo obrigatório" style="width: 34%;height:25;" disabled="#{cadastro.disableSelectCidadeOptions}"&gt; &lt;f:selectItems value="#{cadastro.selectCidadeOptions}"/&gt; &lt;/h:selectOneMenu&gt; . . . &lt;/h:form&gt; . . .

Se alguém poder me ajudar, por favor!
Estou ficando careca ja!!

reditei para abrir mais facíl

Obrigado.

2 Respostas

Guilherme_Gomes

Primeiro:

Assim que você ficar careca vai saber!

Posta uma parte da classe que é responsavel pelo select e apenas o trecho do HTML que importa, ler tudo aquilo é loucura!

Se eu for chutar alguma coisa, diria que você tem um Lista de SelectItem que está com item nulo!

leo_mf

Problema resolvido!

Eu também achei que era um intem nulo, mas eu procurei e não achei nenhum item nulo.

Para resolver o problema eu fiz isto:

&lt;a4j:region&gt; &lt;h:form&gt; &lt;h:selectOneMenu id="estado" value="#{cadastro.estado}" binding="#{cadastro.htmlSelectOneMenu}"&gt; &lt;f:selectItems value="#{cadastro.selectEstadoOptions}" /&gt; &lt;ajax:support action="#{cadastro.seletedEstado}" event="onchange" reRender="cidade"/&gt; &lt;/h:selectOneMenu&gt; &lt;/h:form&gt; &lt;/a4j:region&gt;

Tive que usar uma tag region do richfaces( essa tag delimita o escopo de processamento) e depois a tag form dentro dela.
Eu ate agora não sei porque tive que usar a tag form. Pelo que eu vi na documentação do richfaces, só a tag region ja resolveria o problema. Eu acho que isso é um bug do richfaces.

Valew amigo.

Criado 24 de março de 2009
Ultima resposta 25 de mar. de 2009
Respostas 2
Participantes 2