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 ?