Problemas com Ajax4jsf

Olá amigos,

Estou enfrentando um problema com ajax4jsf …Oo que acontece é que eu crio um list box de estados e um list box de cidades. Inicialmente, o listbox de estados vem preenchido, e o listbox de cidades vazio. A ação ajax que eu estou tentando desenvolver, é muito simples: o usuário seleciona um estado e em seguida o listbox de cidades é preenchido. Para isto, fiz um código estático trabalhando apenas com listas.

Na primeira chamada ajax sistema retorna a lista de cidades e re-renderiza o listbox de cidades, mas na segunda chamada ocorre o seguinte erro: Request error, status: 500 Internal Server Error
Message: Undefined

Versão do a4j: ajax4jsf-1.1.1
Versão do JSF: 1.1

Código:

Managed Bean:


package com.ademir;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.faces.model.SelectItem;

public class CidadeEstadoForm {
	
	private String estado;	
	private String cidade;
	
	private List<SelectItem> listaEstados = new ArrayList<SelectItem>();
	private List<SelectItem> listaCidades = new ArrayList<SelectItem>();
	
	public CidadeEstadoForm() {
		
		SelectItem estado1 = new SelectItem();
		estado1.setLabel("Paraná");
		estado1.setValue("PR");
		
		SelectItem estado2 = new SelectItem();
		estado2.setLabel("Sao Paulo");
		estado2.setValue("SP");
		
		SelectItem estado3 = new SelectItem();
		estado3.setLabel("Rio de Janeiro");
		estado3.setValue("RJ");
		
		this.getListaEstados().add(estado1);
		this.getListaEstados().add(estado2);
		this.getListaEstados().add(estado3);
	}
	
	public List<SelectItem> getListaEstados() {
		return listaEstados;
	}

	public void setListaEstados(List<SelectItem> listaEstados) {
		this.listaEstados = listaEstados;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public List<SelectItem> getListaCidades() {
		return listaCidades;
	}

	public void setListaCidades(List<SelectItem> listaCidades) {
		this.listaCidades = listaCidades;
	}
	
	public void preencherCidades() {
		
		if(this.getEstado() != null && !this.getEstado().equals("")) {
			
			if(this.getEstado().equals("PR")) {
				
				List<SelectItem> x = new ArrayList<SelectItem>();
				SelectItem item = new SelectItem();
				
				item.setValue("Londrina");
				item.setLabel("Londrina");
				x.add(item);
				
				this.setListaCidades(x);
				
			} else if(this.getEstado().equals("SP")) {
				
				List<SelectItem> x = new ArrayList<SelectItem>();
				SelectItem item = new SelectItem();
				
				item.setValue("Piracicaba");
				item.setLabel("Piracicaba");
				x.add(item);
				
				this.setListaCidades(x);
				
			} else if(this.getEstado().equals("RJ")) {
				
				List<SelectItem> x = new ArrayList<SelectItem>();
				
				SelectItem item = new SelectItem();
				
				item.setValue("Angra dos Reis");
				item.setLabel("Angra dos Reis");
				x.add(item);
				
				this.setListaCidades(x);
				
			}
		}
	}
	
}

JSP:


<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>
<%@ taglib uri="http://richfaces.ajax4jsf.org/rich" prefix="rich"%>
<%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<style>

	.simpleLoading {
		position:absolute;
		height:35px;
		
		background-repeat: no-repeat;
		
		text-indent: 35px;
		font-size: 12px;
		font-family: arial;
		
		margin-top:  100px;
		margin-left: 20px;
	}

</style>
<title>Insert title here</title>
</head>
<body>

<f:view>

	<a4j:form id="formSelecao">
		<a4j:region id="box">
			<h:panelGrid columns="2">
				<h:column>
					<a4j:status for="box" startStyleClass="simpleLoading" id="status"
						startText="Buscando " stopText=" " />
				</h:column>
			</h:panelGrid>

			<h:panelGrid columns="2" width="100%">
				<h:column>Estado:</h:column>
				<h:column>
					<h:selectOneListbox value="#{cidadeEstadoForm.estado}" size="1">
						<a4j:support event="onchange"
							action="#{cidadeEstadoForm.preencherCidades}"
							reRender="cityBox"></a4j:support>
						<f:selectItems value="#{cidadeEstadoForm.listaEstados}" />
					</h:selectOneListbox>
				</h:column>
			</h:panelGrid>

			<h:panelGrid columns="2" width="100%">
				<h:column>Cidade:</h:column>
				<h:column>
					<h:selectOneListbox value="#{cidadeEstadoForm.cidade}"
						id="cityBox">
						<f:selectItems value="#{cidadeEstadoForm.listaCidades}" />
					</h:selectOneListbox>
				</h:column>
			</h:panelGrid>

		</a4j:region>
	</a4j:form>
	
</f:view>
</body>
</html>

Agradeço

Já enfrentei um problema semelhante, na segunda vez que ele renderizava cidades dava um erro. Pois bem, resolvi da seguinte forma
if(list.size() <= 0)
{
SelectItem itens = new SelectItem("","");
list.add(itens);
}

Até nao encontrar uma solução elegante, isso tem funcionado…rs.
O erro deve ser ocasionado pelo ponteiro de elementos no array do SelectItem.
Abraço.