Pessoal.
Proceguindo em meu aprendizado, estou tentando fazer combos aninhados (Estado/Cidade),
contudo ao executar o metodo de buscar as cidades faço o query mas ao tentar retornar na tela o sistema trava e não consegue renderizar a tela.
O erro
11/10/2010 18:46:05 com.sun.facelets.FaceletViewHandler handleRenderException
GRAVE: Error Rendering View[/usuario.xhtml]
java.lang.NullPointerException: Argument Error: Parameter key is null
at com.sun.faces.util.Util.notNull(Util.java:241)
at com.sun.faces.context.RequestMap.remove(ExternalContextImpl.java:1093
Este e a bean
@Id
@GeneratedValue
@Column(name="idcidade")
private Integer sequencialCidade;
@Column(name="txcidade")
private String nomeCidade;
@Enumerated(EnumType.ORDINAL) //Já Tentei .STRING e o erro e o mesmo
@Column(name="codestado")
Este é o enum
public enum Estado {
SP,RJ,PR,DF,ES,MG,SC,MT;
}
A pagina.
<dl>
<dt><h:outputText value="Estado:" /></dt>
<dd>
<h:selectOneMenu id="estado" value="#{usuarioAction.estadoEscolha}">
<f:selectItems value="#{usuarioAction.estado}" />
<a4j:support event="onchange" ajaxSingle="true" action="#{usuarioAction.PreencherCidade}" reRender="estado,cidade"/>
</h:selectOneMenu>
</dd>
<dt><h:outputText value="Cidade:"/></dt>
<dd>
<h:selectOneMenu id="cidade" value="#{usuarioAction.cidadeEscolha}">
<s:selectItems value="#{usuarioAction.cidades}" noSelectionLabel="Selecione..."/>
<s:convertEntity />
</h:selectOneMenu>
</dd>
</dl>
A chamada do metodo PreencherCidade()
public class UsuarioAction implements Serializable{
@In
private br.romulor2.dao.UsuarioDAO usuarioDAO;
@In
private br.romulor2.dao.CidadeDAO cidadeDAO;
private br.romulor2.bel.Usuario usuario;
private List<br.romulor2.bel.Usuario> usuarios;
private List<SelectItem> cidades;
private List<SelectItem> estado;
private List<Sexo> sexo;
private String estadoEscolha;
private Integer cidadeEscolha;
private String senhaConfirmacao;
public String PreencherCidade()
{
List<Cidade> cidadesResultado = new ArrayList<Cidade>();
Cidade cidadePesquisa = new Cidade();
Estado estadoPesquisa = null;
cidadePesquisa.setEstado(estadoPesquisa.valueOf(estadoEscolha));
cidadesResultado = cidadeDAO.pesquisar(cidadePesquisa);
cidades.add(new SelectItem(0,"Selecione..."));
for(int i= 0; i <cidadesResultado.size(); i++)
cidades.add(new SelectItem(cidadesResultado.get(i).getSequencialCidade(),cidadesResultado.get(i).getNomeCidade()));
//"iniciando" o combo
cidadeEscolha = 0;
return "SUCCESS";
}
public List<br.romulor2.adorandocommusica.bel.Cidade> getCidades() {
return cidades;
}
public void setCidades(List<br.romulor2.adorandocommusica.bel.Cidade> cidades) {
this.cidades = cidades;
}
public String getEstadoEscolha() {
return estadoEscolha;
}
public void setEstadoEscolha(String estadoEscolha) {
this.estadoEscolha = estadoEscolha;
}
public void setEstado(List<SelectItem> estado) {
this.estado = estado;
}
public List<SelectItem> getEstado() {
return estado;
}
}
O metodo pesquisar da Dao
public List<Cidade> pesquisar(br.romulor2.bel.Cidade cidade)
{
String query = "from br.romulor2.bel.Cidade c ";
Query pesquisa = null;
int i = 0;
if(cidade.getNomeCidade() != null)
{
if (i==0) query += " where ";
query = query + "nomeCidade = :nomeCidade";
i++;
}
if(cidade.getEstado().toString() != null)
{
if (i==0) query += " where "; else query += " and ";
query = query + "estado = :estado";
}
pesquisa = teste.createQuery(query);
if(cidade.getNomeCidade() != null)
pesquisa.setString("nomeCidade",cidade.getNomeCidade());
if(cidade.getEstado().toString() != null)
pesquisa.setString("estado",cidade.getEstado().toString());
return pesquisa.list();
}