Problema com valueChangeListener no JSF 2

2 respostas
F

Oi pessoal, tenho uma aplicação que uso JSF 2 com hibernate,

tenho uma tabela de cidades e outra de estados, to tentando criar dois comboboxs(ou selectOne), o primeiro com o nome dos estados e o segundo com o nome das cidades.

A ideia é simples, ao selecionar um estado no primeiro combobox, a cidade seria exibida no segundo, eu até conseguir fazer isso usando o valueChangeListener , porém está dando um erro ao executar um commandButton

Formulario:pesCidade: Erro de validação: o valor não é válido

Não entendi o pq do erro, qualquer ajuda é muito bem-vinda

pagina.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                template="/template/principalSec.xhtml"
                xmlns:h="http://java.sun.com/jsf/html"                
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:rich="http://richfaces.org/rich"
                xmlns:a4j="http://richfaces.org/a4j"
                xmlns:c="http://java.sun.com/jsp/jstl/core"
                >

    <ui:define name="css_javascript">

    </ui:define>

    <ui:define name="body">
        <div align="center">
            <h1>Welcome</h1>
            <h:messages/>
            
            <h:form id="Formulario">
                <br/>

                <h:selectOneMenu valueChangeListener="#{theSelectBean.mudaLista}" onchange="submit()" id="pesEstado" value="#{theSelectBean.nomeestado}">
                    <f:selectItems value="#{gravaEstado.estados}" var="u" itemLabel="#{u.est_nom}" itemValue="#{u.est_nom}" />
                </h:selectOneMenu>

                <br/><br/>

                <h:selectOneMenu id="pesCidade" value="#{gravaCidade.cid_nome}"  >
                    <f:selectItems value="#{theSelectBean.cidades}" var="u" itemLabel="#{u.cid_nom}" itemValue="#{u.cid_id}" />
                </h:selectOneMenu>

                <h:commandButton value="Clica" />
                <br/><br/>
                

            </h:form>
        </div>
    </ui:define>

</ui:composition>
Bean
@ManagedBean
public class TheSelectBean {

    private String nome;
    private String nomeestado;
    private Integer idestado;    
    private String sexDesc;
    private HtmlInputText sexDescCmp;
    private String capt;
    private HtmlInputText capturador;
    private List cidades;
    private HtmlSelectOneMenu selectonemenu;

    public void mudaLista(ValueChangeEvent event) {

        System.out.println("String: " + event.getNewValue().toString());
        
        Session sessao = CriadorDeSessaoNovo.getSession();

        Criteria listagem_query = sessao.createCriteria(Cidade.class).
                createAlias("estado", "es").
                addOrder(Order.asc("es.est_nom")).
                add(Restrictions.eq("es.est_nom", event.getNewValue().toString() ).                
                ignoreCase());
        setCidades(listagem_query.list());        

        sessao.close();
        FacesContext.getCurrentInstance().renderResponse();
    }

2 Respostas

gustavoliveira

Cara pelo que o erro diz pode ser o valor que você esta tentando jogar no seu value, verifique o tipo do cid_nome… é realmente o valor que esta no itemValue que vc quer setar no seu gravaCidade.cid_nome ?! Pela descricao que vc colocou aqui “gravaCidade.cid_nome” vc quer o nome e não o ID certo?..

Não seria isso? :

<h:selectOneMenu id="pesCidade" value="#{gravaCidade.cid_nome}"  >   
  <f:selectItems value="#{theSelectBean.cidades}" var="u" itemLabel="#{u.cid_nom}" itemValue="#{u.cid_nom}" />   
   </h:selectOneMenu>
F

Tem razão , eu quero é o ID mesmo, mas porém eu mudei o codigo para:

<h:selectOneMenu id="pesCidade" value="#{gravaCidade.cid_id}"  >   
  <f:selectItems value="#{theSelectBean.cidades}" var="u" itemLabel="#{u.cid_nom}" itemValue="#{u.cid_id}" />   
   </h:selectOneMenu>

e continua dando o mesmo erro, inclusive tentei sem usar o value do selectOneMenu

<h:selectOneMenu id="pesCidade"  >   
  <f:selectItems value="#{theSelectBean.cidades}" var="u" itemLabel="#{u.cid_nom}" itemValue="#{u.cid_id}" />   
   </h:selectOneMenu>

Ainda sim , não adiantou, ta dificil

Criado 10 de agosto de 2011
Ultima resposta 10 de ago. de 2011
Respostas 2
Participantes 2