Ola pessoal, tenho uma aplicação com JSF 2 e Richfaces 4,
tenho um selectOneMenu que contem uma lista de paises e ao selecionar um dos países ele carrega uma lista de estados baseada no país escolhido, porém como isso é feito usando um valueChangeListener="#{gravaCidade.mudaListaCidade}"
a pagina volta ao topo novamente, tirando o foco do usúario, gostaria de saber se é possivel adicionar um comportamento ajax a isso ou passar o foco para a lista através de javascript(o q eu não gostaria de fazer, pois nessa caso o controle da minha aplicação ficaria na view, mas caso não tivesse outro jeito, eu aceitaria fazer assim ate descobrir um jeito melhor)
parte do codigo da pagina xhtml
<tr>
<td>País:*</td>
<td><h:selectOneMenu immediate="true" valueChangeListener="#{gravaCidade.mudaListaEstado}" onchange="submit()" id="cidPais" value="#{gravaParentesco.par_pai_id}">
<f:selectItem itemLabel="" itemValue="" />
<f:selectItems value="#{gravaCidade.paises}" var="u" itemLabel="#{u.pai_nom}" itemValue="#{u.pai_id}" />
</h:selectOneMenu>
</td>
</tr>
<tr>
<td>Estado:*</td>
<td>
<h:selectOneMenu immediate="true" valueChangeListener="#{gravaCidade.mudaListaCidade}" onchange="submit()" id="somEstado" value="#{gravaParentesco.par_est_id}" >
<f:selectItem itemLabel="" itemValue="" />
<f:selectItems value="#{gravaCidade.estadosMany}" var="u" itemLabel="#{u.est_nom}" itemValue="#{u.est_id}" />
</h:selectOneMenu>
</td>
</tr>
<tr>
<td colspan="2"><h:message styleClass="mensagemErro" for="somEstado" /></td>
</tr>
Codigo do manaegdBean
public void mudaListaEstado(ValueChangeEvent event) {
Session sessao = CriadorDeSessaoNovo.getSession();
String idString = event.getNewValue().toString();
//System.out.println("String: " + event.getNewValue().toString());
Criteria listagem_query = sessao.createCriteria(Estado.class).
createAlias("pais", "es").
addOrder(Order.asc("est_nom")).
addOrder(Order.asc("es.pai_nom")).
add(Restrictions.eq("es.pai_id", new Integer(idString)));
setEstadosMany(listagem_query.list());
FacesContext.getCurrentInstance().renderResponse();
sessao.close();
}