Pessoal,
Estou iniciando no estudo de java e montei um esquema struct 2 e jsp de uma tela de cadastro de usuarios para teste.
Agora estou incrementando a tela e ao tentar alimentar o combo cidade com as cidades de um determinado estado, conforme está registrado no banco de dados, aguarrei novamente.
O sistema esta atualizando legalzinho com ajax e montando o list com as cidades, mas num consigo fazer com que o combo cidade da tela seja atualizado por nada desse mundo.
Caso possam me ajudar agradeceria muito.
Grato.
Minha action
@Action(value="CarregaCidade",results = {@Result(name=SUCCESS, location="/usuario.jsp")})
public String CarregaCidade()
{
//Declarando as variaveis
romulor2.dao.Cidade ciddao = new romulor2.dao.Cidade();
conn.iniciaTransacao();
romulor2.bel.Cidade pesquisacidade = new romulor2.bel.Cidade();
//preenchendo o filtro
pesquisacidade.setEstado(uf);
//Pesquisando as cidades
List<romulor2.bel.Cidade> cid = ciddao.pesquisar(conn.getSessao(), pesquisacidade);
//Preenchendo List do combo
cidade = new ArrayList<String>();
for (Cidade cidadeEstado : cid)
cidade.add(cidadeEstado.getNomeCidade());
return SUCCESS;
}
O jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>teste</title>
<script type="text/javascript" src="csjquery/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="csjquery/jquery.ui.widget.min.js"></script>
<script type="text/javascript" src="csjquery/jquery.ui.core.min.js"></script>
<script type="text/javascript" src="csjquery/jquery.ui.button.min.js"></script>
</head>
<body >
<s:form action="UsuarioSalvar">
<fieldset>
<legend>teste</legend>
<dl>
<s:textfield name="usuario.nomeUsuario" label="Nome:" />
<s:textfield name="usuario.loginUsuario" label="Login:" />
<s:textfield name="usuario.senhaUsuario" label="Senha:" />
<s:textfield name="usuario.emailUsuario" label="E-mail:" />
<s:textfield name="usuario.dataNascimento" label="Data:" />
<s:select name="usuario.sexo" list="sexo" headerKey="0" label="Sexo:" />
<s:select name="usuario.estado" list="estado" headerKey="0" label="UF:" onchange="CarregaCidade(this.value)" />
<s:select name="usuario.cidade" list="#{cidade}" headerKey="0" label="Cidade:" />
</dl>
</fieldset>
<script type="text/javascript">
function CarregaCidade(estado)
{
$.get("CarregaCidade.action?uf=" + estado);
}
</script>
<fieldset>
<center><s:submit /></center>
</fieldset>
</s:form>
</body>
</html>
No seu java script (carregaCidade) faça algo desse tipo.
$.getJSON("CarregaCidade.action?uf=" + estado,function(data){
for (var i = 0; i < data.length; i++){
str = str + '<option value="'+data[i].idCidade+'">'+data.nmCidade+'</option>';
}
$('#selectDasCidades').html(str);
});
mais lembre-se, sua action tem que retorna um objeto do tipo json.
espero ter ajudado!
Amigão.
Mas assim não utilizo a propriedade list do combo.
Minha ideia é não ter código no front end (como é feito no C#).
Vi a possibilidade de usar o plugin jquery-struct2, mas nesse caso ainda foi pior o sistema nem carrega o combo na primeira vez (veja o post: http://www.guj.com.br/posts/list/216685.java).
Valeu e aguardo novidades.
sem nenhum codigo no front end acho meio difícil, pelo menos algo para chamar a function que popula tem q ter.
Sim. Claro.
Isso eu até fiz.
O que não desejo fazer é colocar coisas como um for para preencher o combo.
Gostaria de trazer o objeto list da action e que o combo o interpretasse como acontece no momento que carrego a tela.
O problema é que consigo carregar a lista, mas não sei como dar o “refresh” no combo.
tenta assim:
<SCRIPT type="text/javascript">
//Chame a função toda vez que alterar o valor
function alterarCombo(){
$.publish('reloadcidades');
}
</SCRIPT>
<s:form id ="formCadPaciente" >
<s:select "ESTADOS" />
<s:url id="cidadeslist" action="cidade" method="listacidades" ></s:url>
<sj:select name="paciente.cidade.idCidade" href="%{cidadeslist}" formIds="formCadPaciente" reloadTopics="reloadcidades" list="cidades" listKey="idCidade" listValue="nmCidade" />
</s:form>
Procura ver como funciona as tags onChangeTopics onCompleteTopics reloadcidades do sj:select.
Pessoal.
Desculpe a insistencia, mas ainda naum consegui fazer isso funcionar!
O action está sendo disparado, a list esta sendo preenchida mas a pagina não é atualizada. Veja que estou tentando preencher o textfield login tambem, mas nem ele está atualizando!!!
Olha meu código alterado.
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<html>
<head>
<title>teste</title>
<meta name="Description" content="R2 WebDeveloper." />
<meta name="Keywords" content="your, keywords" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="Distribution" content="Global" />
<meta name="Author" content="R2 Web - romulor2@gmail.com" />
<meta name="Robots" content="index,follow" />
<sj:head jqueryui="true"/>
<script type="text/javascript">
function cidadeslist(estado)
{ //a função
$.post("CarregaCidade.action?estadoValor=" + estado);
}
</script>
</head>
<body >
<s:form id="form" action="UsuarioIncluir" theme="simple" cssClass="yform">
<fieldset>
<legend>AJAX Form</legend>
<div class="type-text">
<label for="echo">Echo: </label>
<s:textfield id="echo" name="echo" value="Hello World!!!"/>
</div>
<dl><sj:textfield name="usuario.nomeUsuario" label="Nome:" /></dl>
<dl>
<sj:textfield name="usuario.loginUsuario" label="Login:" reloadTopics="CarregaCidade" />
<sj:textfield name="usuario.senhaUsuario" label="Senha:" />
</dl>
<dl><sj:textfield name="usuario.emailUsuario" label="E-mail:" /></dl>
<dl><sj:textfield name="usuario.dataNascimento" label="Data:" /></dl>
<dl><s:select name="usuario.sexo" list="sexo" headerKey="0" label="Sexo" /></dl>
<dl id="ufcidade">
<s:url id="cidadeslist" action="CarregaCidade"></s:url> //o esquema do estado chamando a cidade.
<s:select name="estadoValor" list="estado" headerKey="0" label="UF" onchange="cidadeslist(this.value)" />
<sj:select href="%{cidadeslist}" reloadTopics="CarregaCidade" name="usuario.cidade" list="cidade" headerKey="0" label="Cidade" />
</dl>
</fieldset>
<fieldset>
<center><sj:submit targets="formResult" value="Salvar Dados" indicator="indicator"/></center>
</fieldset>
</s:form>
</body>
</html>
a Action
@Action(value="CarregaCidade",results = {@Result(name=SUCCESS, location="/usuario.jsp")})
public String CarregaCidade()
{
estado = new ArrayList<Estado>();
for(Estado est : Estado.values())
estado.add(est);
sexo = new ArrayList<Sexo>();
for(Sexo sex : Sexo.values())
sexo.add(sex);
romulor2.bel.Cidade cidadepesquisa = new romulor2.bel.Cidade();
cidadepesquisa.setEstado(estadoValor);
romulor2.dao.Cidade ciddao = new romulor2.dao.Cidade();
conn.iniciaTransacao();
List<romulor2.bel.Cidade> result = ciddao.pesquisar(conn.getSessao(), cidadepesquisa);
cidade = new ArrayList<String>();
for (int i = 0; i < result.size(); i++) {
cidade.add(result.get(i).getNomeCidade());
}
romulor2.bel.Usuario usuteste = new romulor2.bel.Usuario();
usuteste.setLoginUsuario("refresh");
this.setUsuario(usuteste);
return SUCCESS;
}
A impressão que tenho é que seja algum problema de ajax, mas até agora num descobri o que pode ser!
romulor2 você conseguiu resolver este problema??? to tentando fazer a mesma coisa e não to conseguindo.
Rapaz.
Desisti de tentar e comecei a estudar o richface
vlw romulor2 motivador rsrsr
to tentando o struts2 jquery
mas ainda nao testei