Rich:combobox recebe String vazia de converter

Olá pessoal, estou com o seguinte problema: Tenho dois combos um estado e outro cidade que ao selecionar o estado (que tb tem um converter e está funcionando sem problemas), o outro deve ser carregado com a lista de cidades, o que está acontecendo. Só que ao selecionar uma cidade, é lançado um erro de validação ( required=true), dizendo que uma cidade deve ser selecionada, ora mais eu acabei de selecionar. O que será que está acontecendo?


//[b]Minha entidade Cidade[/b]
public class Cidades implements Serializable {
	private static final long serialVersionUID = 1L;
	@Id
	@Basic(optional = false)
	@Column(name = "ID_CIDADES", nullable = false)
	private Integer idCidades = 0;
	@Basic(optional = false)
	@Column(name = "DSC_CIDADE", nullable = false, length = 100)
	private String dscCidade = "";
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "cidades", fetch = FetchType.LAZY)
	private List<ClientesPessoaJuridica> clientesPessoaJuridicaList = new ArrayList<ClientesPessoaJuridica>();
	@JoinColumn(name = "ID_ESTADOS", referencedColumnName = "ID_ESTADOS", nullable = false)
	@ManyToOne(optional = false, fetch = FetchType.LAZY)
	private Estados estados = new Estados();
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "cidades", fetch = FetchType.LAZY)
	private List<ClientesPessoaFisica> clientesPessoaFisicaList = new ArrayList<ClientesPessoaFisica>();

	//getters e setters omitidos

	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((dscCidade == null) ? 0 : dscCidade.hashCode());
		result = prime * result
				+ ((idCidades == null) ? 0 : idCidades.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (!(obj instanceof Cidades)) {
			return false;
		}
		Cidades other = (Cidades) obj;
		if (dscCidade == null) {
			if (other.dscCidade != null) {
				return false;
			}
		} else if (!dscCidade.equals(other.dscCidade)) {
			return false;
		}
		if (idCidades == null) {
			if (other.idCidades != null) {
				return false;
			}
		} else if (!idCidades.equals(other.idCidades)) {
			return false;
		}
		return true;
	}

	@Override
	public String toString() {
		return getDscCidade();
	}

	

}

//[b]Meu combo cidade[/b]
	
	<rich:comboBox enableManualInput="false" id="txt_cidade_pj"
  	value="#{MBusuarios.usuarios.cpj.cidades}" required="true"
	requiredMessage="#{msg.required}" defaultLabel="Escolha a cidade"
	selectFirstOnUpdate="true" inputClass="input_text"
	converter="converter.cidadeConverter">
		<f:selectItems value="#{MBusuarios.cidadesPJSelectItens}" />
			<a4j:support event="onchange"
				reRender="txt_cidade_pj,msg_cidade_pj1,msg_cidade_pj2"
				limitToList="true" />
	</rich:comboBox>
		



// [b]Meu converter[/b]


package converters;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;

import managedBean.MBusuarios;

import dao.CidadesDao;
import entities.Cidades;
import escopo.ApplicationBean1;

public class cidadeConverter implements Converter {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

	@Override
	public Object getAsObject(FacesContext context, UIComponent arg1, String arg2) {
			
		
		try {
			if (arg2.trim().equals("") || arg2 == null)
				return new Cidades();
			else {
				
				CidadesDao dao = new CidadesDao();
				cidades = dao.findByDscCidade(arg2);
				return cidades;
			}
		} catch (Exception ex) {
			return new Cidades();
		}
	}

	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
		// TODO Auto-generated method stub
		if (arg2 instanceof Cidades) {
			Cidades c = (Cidades) arg2;
			return c.getDscCidade();
		} else
			return "";
	}

}