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