selectOneMenu - valor inválido quando dou um submit - JSF 1.2 - NAO RESOLVIDO

Galera é o seguinte sou novo em JSF e estamos tendo uma dificuldade que aparentemente parece ridicula, mas nao estou conseguindo resolver, se alguem puder me dar um help vou ficar agradecido…vamos lá.

Temos um formulario que possui dois selectOneMenu, o 1º carrega todas as siglas dos estados, o 2º carrega todas os municipios referente ao estado via ajax, até aí tudo bem, o problema é quando vamos submeter o formulário, aparece uma mensagem de valor inválido… já tentamos sobrescrever o metodo equals e hash code, enfim diversas formas…

segue cod abaixo:

Eu tenho um selectOneMenu carregado com valores sigla de todos os estados:

<h:outputLabel value="#{ msg.uf }" />
	<h:panelGroup>
		<h:selectOneMenu required="true" value="#{ cadastroPbm.pbm.sgEstado }" id="uf">
			<f:selectItems value="#{ cadastroPbm.comboUF }" />
			<a4j:support event="onchange" ajaxSingle="true" action="#{ cadastroPbm.popularComboCidades }" reRender="uf, cidade" />
		</h:selectOneMenu>
			<rich:message for="uf" styleClass="erro" />
        </h:panelGroup>

Renderizando para este outro selectOneMenu:

<h:outputLabel value="#{ msg.municipio }" />
	<h:panelGroup>
		<h:selectOneMenu value="#{ cadastroPbm.pbm.cdCidade }" id="cidade">
			<f:selectItems value="#{ cadastroPbm.comboCidades }" />
		</h:selectOneMenu>
		<rich:message for="cidade" styleClass="erro" />
        </h:panelGroup>

Segue o Mbean completo:

public class CadastroPbmsMBean{

	private Logger log = Logger.getLogger( this.getClass().getName() );
	private TbPbmVO pbm = new TbPbmVO();
	private List< SelectItem > comboUF = new ArrayList< SelectItem >();
	private List< SelectItem > comboCidades = new ArrayList< SelectItem >();
	private GenericInsertOrUpdateDelegate delegateInsert = new GenericInsertOrUpdateDelegate();
	private GenericSelectObjectDelegate delegateSelect = new GenericSelectObjectDelegate();

	public TbPbmVO getPbm(){
		return pbm;
	}

	public void setPbm( TbPbmVO pbm ){
		this.pbm = pbm;
	}

	public List< SelectItem > getComboUF(){
		if( comboUF == null || comboUF.size() == 0 ){
			String[] listaUF = Constantes.Web.listaUF;
			comboUF.add( new SelectItem( null, "" ) );
			for( int x = 0; x < listaUF.length; x ++ ){
				comboUF.add( new SelectItem( listaUF[ x ], listaUF[ x ] ) );
			}
		}
		return comboUF;
	}

	public List< SelectItem > getComboCidades(){
		return comboCidades;
	}

	public String salvar(){

		try{
			String cnpj = Util.tratarCnpj( pbm.getNrCnpjPbm() );
			pbm.setNrCnpjPbm( cnpj );

			LoginVO loginVO = ( LoginVO ) Util.getFromSessionMap( Constantes.Web.SessionMap.LOGIN );
			long cdOperador = loginVO.getCdOperador();
			Timestamp dtAtual = new Timestamp( new Date().getTime() );

			pbm.setDtAlteracao( dtAtual );
			pbm.setCdOperadorAlteracao( cdOperador );

			if( pbm.getDtCadastro() == null ){
				pbm.setDtCadastro( dtAtual );
			}
			if( pbm.getCdOperadorCadastro() == null ){
				pbm.setCdOperadorCadastro( cdOperador );
			}

			pbm.setFlOk( Constantes.VL_FIXO_ZERO );
			pbm.setFlVlDivergente( Constantes.VL_FIXO_ZERO );
			pbm.setFlWeb( Constantes.VL_FIXO_ZERO );

			GenericVO genericVO = new GenericVO();
			List< TbPbmVO > lista = new ArrayList< TbPbmVO >();

			lista.add( pbm );
			genericVO.setListObjetoVO( lista );
			genericVO.setNmClassePojo( Constantes.DAO.POJO.NM_TB_PBM );

			List< GenericVO > listGenericVO = new ArrayList< GenericVO >();
			listGenericVO.add( genericVO );
			
			delegateInsert.execute( listGenericVO );
			Util.addGlobalMessage( FacesMessage.SEVERITY_INFO, Constantes.MSG_NEG.CADASTRO_SUCESSO );

		} catch( GenericInsertOrUpdateDelegateException ge ){
			log.log( Level.SEVERE, ge.getMessage(), ge );
			Util.addGlobalMessage( FacesMessage.SEVERITY_ERROR, ge.getMessage() );
		
		} catch( Exception e ){
			log.log( Level.SEVERE, "Erro ao salvar PBMS Web: " + e.getMessage(), e );
			Util.addGlobalMessage( FacesMessage.SEVERITY_ERROR, e.getMessage() );
		}
		
		return Constantes.Forward.CADASTRO_PBMS;
	}

	@SuppressWarnings( "unchecked" )
	public void popularComboCidades() throws GenericSelectObjectDelegateException, Exception{
		try{
			comboCidades.clear();
			comboCidades.add( new SelectItem( null, "" ) );
			
			if( pbm.getSgEstado() != null && !pbm.getSgEstado().equals( "" ) ){
				
				String[] fields = new String[]{ Constantes.DAO.POJO.FIELD.SG_ESTADO };
				Object[] param = new Object[]{ pbm.getSgEstado() };
				List< TbCepCidadeVO > list = ( List< TbCepCidadeVO > ) delegateSelect.recuperarListaObjeto(
						Constantes.DAO.POJO.NM_TB_CEP_CIDADE, fields, param, TbCepCidadeVO.class );
				for( TbCepCidadeVO vo : list ){
					comboCidades.add( new SelectItem( vo.getCdCidade(), vo.getDsCidade() ) );
				}
			}
			
		} catch( GenericSelectObjectDelegateException ge ){
			log.log( Level.SEVERE, ge.getMessage(), ge );
			throw new  GenericSelectObjectDelegateException( ge );
		} catch( Exception e ){
			log.log( Level.SEVERE, e.getMessage(), e );
			throw new Exception( e );
		}
	}
}

o VO:



import java.io.Serializable;

public class TbCepCidadeVO implements Serializable{

	private static final long serialVersionUID = 1L;
	
	private String cdCidade;
	private String dsCidade;
	private String sgEstado;
	public String getCdCidade(){
		return cdCidade;
	}
	public void setCdCidade( String cdCidade ){
		this.cdCidade = cdCidade;
	}
	public String getDsCidade(){
		return dsCidade;
	}
	public void setDsCidade( String dsCidade ){
		this.dsCidade = dsCidade;
	}
	public String getSgEstado(){
		return sgEstado;
	}
	public void setSgEstado( String sgEstado ){
		this.sgEstado = sgEstado;
	}
	@Override
	public int hashCode(){
		final int prime = 31;
		int result = 1;
		result = prime * result + ( ( cdCidade == null )? 0 : cdCidade.hashCode() );
		result = prime * result + ( ( dsCidade == null )? 0 : dsCidade.hashCode() );
		result = prime * result + ( ( sgEstado == null )? 0 : sgEstado.hashCode() );
		return result;
	}
	@Override
	public boolean equals( Object obj ){
		if( this == obj )
			return true;
		if( obj == null )
			return false;
		if( getClass() != obj.getClass() )
			return false;
		TbCepCidadeVO other = ( TbCepCidadeVO ) obj;
		if( cdCidade == null ){
			if( other.cdCidade != null )
				return false;
		} else if( ! cdCidade.equals( other.cdCidade ) )
			return false;
		if( dsCidade == null ){
			if( other.dsCidade != null )
				return false;
		} else if( ! dsCidade.equals( other.dsCidade ) )
			return false;
		if( sgEstado == null ){
			if( other.sgEstado != null )
				return false;
		} else if( ! sgEstado.equals( other.sgEstado ) )
			return false;
		return true;
	}
	
	
	

}

algum ser iluminado poderia me ajudar ?

Uma coisa que vi aqui é que o nome do seu managed bean é CadastroPbmsMBean e você referencia ele na tela como
cadastroPbm, sendo que você não sobrecreveu o nome no managedBean.
Não sei se é isso, mas foi algo que eu observei.

[quote=lele_vader]Uma coisa que vi aqui é que o nome do seu managed bean é CadastroPbmsMBean e você referencia ele na tela como
cadastroPbm, sendo que você não sobrecreveu o nome no managedBean.
Não sei se é isso, mas foi algo que eu observei. [/quote]

Olá lele_vader, boa tarde!

eu mapeei ele no facesConfig.xml

<managed-bean>
	<managed-bean-name>cadastroPbm</managed-bean-name>
	<managed-bean-class>br.com.empresa.pbm.mbean.CadastroPbmsMBean</managed-bean-class>
	<managed-bean-scope>request</managed-bean-scope>
</managed-bean>

Muito obrigado pela atenção! :smiley:

Na sua classe TbCepCidadeVO não tem getCdCidade, o que faz vir null lá no managed bean eu acho.

Tenta criar o método para ver.

[quote=lele_vader]Na sua classe TbCepCidadeVO não tem getCdCidade, o que faz vir null lá no managed bean eu acho.

Tenta criar o método para ver.[/quote]

Pior que tem sim está nesse trecho

private String sgEstado;  
    public String getCdCidade(){  
        return cdCidade;  
    }  

Não estou conseguindo entender o que está acontecendo…

Obrigado!

Aqui na listagem que enviou não tem não.
Tem certeza que tem o método ?

Qual valor que chega no campo quando está no servidor ?

[quote=lele_vader]Aqui na listagem que enviou não tem não.
Tem certeza que tem o método ?

Qual valor que chega no campo quando está no servidor ?[/quote]

Então os valores estao disponibilizados pela variavel no Mbean (pbm) :

private TbPbmVO pbm = new TbPbmVO();

public TbPbmVO getPbm(){
		return pbm;
	}

	public void setPbm( TbPbmVO pbm ){
		this.pbm = pbm;
	}

as variaveis vem populadas os problema é quando dou um submit, parece que nao aceita os valores e dá invalido. =(

Obrigado pela atenção lele_vader! =)

será que foi isso que entendi ?

Dá algum stack trace ?

Nem entra no managed bean ?

[quote=lele_vader]Dá algum stack trace ?

Nem entra no managed bean ?[/quote]

Pior que não dá nenhum stack trace e nem da erro de nada. Não chega nem entrar no Mbean … para na validação mesmo…é muito estranho. Conversei com varias pessoas e ninguém sabe direito o que é…nao sei se é pau do JSF… mas continuo tentando aqui.

Tá complicado mesmo.
Quando descobrir me avisa.
Se pensar em algo a mais lhe aviso.

[quote=lele_vader]Tá complicado mesmo.
Quando descobrir me avisa.
Se pensar em algo a mais lhe aviso.[/quote]

Ok. Obrigado, vou continuar tentando!

Alguém mais desconfia o que pode ser ? ou alguma alternativa ? :?

alguém?