DropDownList dinâmico e exception

1 resposta
marciosc

Eu estou precisando criar dropDown dinâmicos para um form numa aplicação!
O caso é o seguinte! qnd seleciono o tipo de documento ele deve me retornar as localizações fisicas disponiveis para o tipo
e isso ele faz sem problemas, mas no momento de executar
a action de post, ele da a exception a seguir:
obs: ja tentei usar arraylist e tb nao deu certo!
a exception só acontece qnd eu seleciono un index maior ou igual a 1 no selectonemenu de localizacoes.

Agradeço pela ajuda!!

Exception:
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)
	org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)

root cause

java.lang.IllegalArgumentException
	javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:149)
	javax.faces.component.UISelectOne.matchValue(UISelectOne.java:141)
	javax.faces.component.UISelectOne.validateValue(UISelectOne.java:114)
	javax.faces.component.UIInput.validate(UIInput.java:645)
	javax.faces.component.UIInput.executeValidate(UIInput.java:849)
	javax.faces.component.UIInput.processValidators(UIInput.java:412)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:912)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:912)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:912)
	javax.faces.component.UIForm.processValidators(UIForm.java:170)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:912)
	javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:342)
	com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:78)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
	org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.

ManagedBean:

public Map getLocalizacoesMap()
    {
    	Map maplocalizacoes;
    	mapLocalizacoes = new HashMap();
        mapLocalizacoes.put(0,new ArrayList());
        
        for(int i = 0; i < tiposDocumentoBanco.size(); i++)
        {
        	List li =  tiposDocumentoBanco.get(i).getArmazenamentosFísicos();
        	List localizacoes = new ArrayList();
        	localizacoes.add("");
        	for (int j = 0; j < li.size(); j++)
            {
                Localizacao localizacao = ((TipoDocumentoLocalizacao)li.get(j)).getLocalizacao();
                localizacoes.add(localizacao.getReferencia());
            }   
        	mapLocalizacoes.put(i + 1,localizacoes);
        }
        return mapLocalizacoes;    	
    }
JSP:
<h:selectOneMenu id="tipoDocumento" value="#{documento.tipoDocumentoSelecionado}" style="width : 339px; height : 23px;">
  <f:selectItem  itemLabel="" itemValue=""/>
  <f:selectItems  value="#{documento.listaTiposDocumento}"/>
  <t:jsValueChangeListener for="indexTipo" property="value" expressionValue="$srcElem.selectedIndex"/>
  <t:jsValueSet name="localizacoesTipo" value="#{documento.localizacoesMap}" />
  <t:jsValueChangeListener for="localizacao" expressionValue="n=$srcElem.selectedIndex; l=localizacoesTipo[n]; $destElem.options.length=0; for(i=0;i<l.length;i++) { $destElem.options[i]=new Option(l[i],l[i]); }" />
</h:selectOneMenu>

<h:selectOneMenu id="localizacao" value="#{documento.localizacaoSelecionada}" style="width : 339px; height : 23px;">
  <f:selectItem  itemLabel="" itemValue=""/>
  <t:jsValueChangeListener for="indexLocalizacao" property="value" expressionValue="$srcElem.selectedIndex"/>
</h:selectOneMenu>

1 Resposta

marciosc

ja resolvi o problema!! o selectOneMenu que vai receber os dados do map, no caso o de localizacoes, tem q iniciar desabilitado na pagina!

<h:selectOneMenu id="tipoDocumento" value="#{documento.tipoDocumentoSelecionado}" style="width : 339px; height : 23px;">
   <f:selectItem  itemLabel="" itemValue=""/>
   <f:selectItems  value="#{documento.listaTiposDocumento}"/>
   <t:jsValueChangeListener for="indexTipo" property="value" expressionValue="$srcElem.selectedIndex"/>
   <t:jsValueSet name="localizacoesTipo" value="#{documento.localizacoesMap}" />
   <t:jsValueChangeListener for="localizacao" expressionValue="n=$srcElem.selectedIndex; l=localizacoesTipo[n]; $destElem.options.length=0; for(i=0;i<l.length;i++) { $destElem.options[i]=new Option(l[i],l[i]); }" />
 </h:selectOneMenu>
 
 <h:selectOneMenu id="localizacao" value="#{documento.localizacaoSelecionada}" style="width : 339px; height : 23px;" disabled="true">
   <f:selectItem  itemLabel="" itemValue=""/>
   <t:jsValueChangeListener for="indexLocalizacao" property="value" expressionValue="$srcElem.selectedIndex"/>
 </h:selectOneMenu>
Criado 12 de setembro de 2006
Ultima resposta 13 de set. de 2006
Respostas 1
Participantes 1