well
Julho 6, 2011, 4:35pm
#1
Pessoal tenho um combobox aninhado, funciona perfeitamente na hora de inserir dados no BD, porem uma hora eu tenho que alterar algo(editar), ai o problema,
quando chamo o editar, ele traz as informações do banco certo, e a UF do combo correta, porem o municipio nao consigo trazer o correto, tipo, meu cadastro esta assim:
UF: RJ cidade: PETROPOLIS
ele traz
UF: RJ cidade: ARAIAL - no caso a primeira.
NA UF esta assim
<label>Estado:</label>
<select name="uf.nome" id="estadoDropdown" >
<option value="${bci.municipioEntrega.uf.id}">${bci.municipioEntrega.uf.nome}</option> // chamo aki para preencher corretamente .. OK
<c:forEach var="u" items="${ufs}">
<option value="${u.id}">${u.nome}</option>
</c:forEach>
</select>
e municipio assim:
<label for="municipio">municipio:</label>
<select name="bci.municipioEntrega.id" id="municipio">
</select>
Tem como eu inserir o correto sendo o primeiro???
vlw
tem sim… o jeito mais fácil é fazer isso via javascript…
depois que ele carregar o combo de municípios, faça (supondo q vc usa jQuery):
$('#municipio').val('${bci.municipioEntrega.id}');
esse código dentro de alguma tag script, dentro da jsp.
lembrando que isso tem q rodar depois q o combo foi carregado
well
Julho 7, 2011, 8:46am
#3
Não funcionou, coloquei la no fim da jsp. o que será que ta de errado?
tem certeza que isso tá acontecendo depois que o combo de municipios está populado?
well
Julho 7, 2011, 8:58am
#5
Ta populado sim, fiz uma alteracao aqui: coloquei um option assim:
<label for="municipio">municipio:</label>
<select id="municipio" name="bci.municipioEntrega.id">
<option selected="selected" value="${bci.municipioEntrega.id}">${bci.municipioEntrega.nome}</option>// nao precisa disso para popular mas fiz um teste.
</select>
apos abri o fonte no navegador.
label for="municipio">municipio:</label>
<select id="municipio" name="bci.municipioEntrega.id">
<option selected="selected" value="6670">BANQUETE</option>// no fonte aparece correto mas no navegador aparece abarracamento q é o primeiro da lista
</select>
Que coisa nao?
well
Julho 7, 2011, 9:11am
#6
Depois que coloquei o OPTION chega dar uma piscada no combo com o valor correto porem muda para o promeiro da lista. vou tentar umas modificacoes aki…
well
Julho 7, 2011, 11:07am
#7
Não consegui ainda , tem alguma outra sugestão Lucas?
qual é o código que vc está usando pra popular o combo de municipios?
well
Julho 7, 2011, 11:36am
#9
Vou postar todos:
dao
@SuppressWarnings("unchecked")
public List<Municipio> listaUfMunicipio(Long uf) {
Session session = (Session) em.getDelegate();
return session.createCriteria(Municipio.class)
.add(Restrictions.like("uf.id", uf)).list();
}
controller
@Get
@Path("/municipios/buscaMunicipios.json")
public void loadMunicipios(Long uf) {
List<Municipio> municipios = dao.listaUfMunicipio(uf);
result.use(Results.json()).withoutRoot().from(municipios).serialize();
}
JS
(function($) {
$.fn.emptySelect = function() {
return this.each(function(){
if (this.tagName=='OPTION') this.options.length = 0;
});
}
$.fn.loadSelect = function(data) {
return this.emptySelect().each(function(){
if (this.tagName=='OPTION') {
var selectElement = this;
$.each(data,function(index,optionData){
var option = new Option(optionData.nome,
optionData.id);
if ($.browser.msie) {
selectElement.add(option);
}
else {
selectElement.add(option,null);
}
});
}
});
}
})(jQuery);
JS
function adjustMunicipioDropdown() {
var estadoValue = $('#estadoDropdown').val();
var dropdownSet = $('#municipio');
if (estadoValue.length == 0)
{
dropdownSet.attr("disabled", true);
dropdownSet.emptySelect();
}
else
{
dropdownSet.attr("disabled", false);
$.getJSON('/webgeo/municipios/buscaMunicipios.json', {
uf : estadoValue
}, function(q) {
dropdownSet.loadSelect(q);
});
}
}
JSP
label for="municipio">municipio:</label>
<select id="municipio" name="bci.municipioEntrega.id"></select>
Ta tudo ai…
vc deve ter em algum lugar a chamada:
adjustMunicipioDropdown();
se isso estiver na jsp, faça:
adjustMunicipioDropdown();
$('#municipio').val('${bci.municipioEntrega.id}');
se não funcionar, tenta trocar de .id pra .nome
well
Julho 7, 2011, 12:29pm
#11
Lucas fiz o que falou:
[code][/code]
e não funcionou, porem fiz um teste aqui: se eu tirar o
name="bci.municipioEntrega.id"[/quote] do select não faz diferença na listagem, só não salva nada na hora de alterar.
Provavelmente por isso que não esta funcionando.
mas não consigo ver uma solução.
move o código do val pra dentro do ajaxStop (o getJSON é assincrono, por isso não deve estar funcionando)…
pra evitar que ele faça sempre, coloque uma var booleana pra que ele só faça uma vez
well
Julho 7, 2011, 12:45pm
#13
Opa, deu resultado fiz parte do que falou, eu acho:
<script type="text/javascript">
$(function(){
$('#loading').hide();
$('#estadoDropdown').change(function(){
adjustMunicipioDropdown();
}).change();
$('#loading').ajaxStart(function() {
$(this).show();
});
$('#loading').ajaxStop(function(){
adjustMunicipioDropdown();
$('#municipio').val('${bci.municipioEntrega.id}');
}).change();
$(this).hide();
});
</script>
porem ficou em um loop infinito, não da para selecionar outro município agora, como fazer essa var booleana, nao saco nada de JS quase.
não coloque o adjust, só o val:
var loaded = false
$('#loading').ajaxStop(function(){
if (!loaded) {
loaded = true;
$('#municipio').val('${bci.municipioEntrega.id}');
}
$(this).hide();
});
well
Julho 7, 2011, 1:10pm
#15
Mantive o ajust de cima.
ficou assim:$(function(){
$('#loading').hide();
$('#estadoDropdown').change(function(){
adjustMunicipioDropdown();
}).change();
$('#loading').ajaxStart(function() {
$(this).show();
});
var loaded = false;
$('#loading').ajaxStop(function(){
if (!loaded) {
loaded = true;
$('#municipio').val('${bci.municipioEntrega.id}');
}
$(this).hide();
});
porem agora nao aparece nada no combo.
coloque isso como primeira linha dentro do seu $(function(){
if ('${bci.municipioEntrega.id}')
adjustMunicipioDropdown();
daí ele já preenche os municípios com o que foi colocado na edição
well
Julho 7, 2011, 2:12pm
#17
Ve se eu coloquei do jeito que vc falou, acho que eu deve ter feito algo errado pois nao deu certo :
$(function(){
if ('${bci.municipioEntrega.id}')
adjustMunicipioDropdown();
$('#loading').hide();
$('#estadoDropdown').change(function(){
adjustMunicipioDropdown();
}).change();
$('#loading').ajaxStart(function() {
$(this).show();
});
var loaded = false
$('#loading').ajaxStop(function(){
if (!loaded) {
loaded = true;
$('#municipio').val('${bci.municipioEntrega.id}');
}
$(this).hide();
});
o combo de municipios veio preenchido? o estado está selecionado?
well
Julho 7, 2011, 2:27pm
#19
sim o do estado já vem selecionado. mais o do municipio nao esta populando.
ele tava populando antes? se sim talvez tenha algum erro de javascript =/
instala o firebug no firefox e vê se acusa algum erro