Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Select Dinâmico com Vraptor e JPA

Olá Pessoal, estou iniciando o desenvolvimento com VRaptor e estou com uma dúvida acredito que seja simples para quem já tenha uma experiência.

Em uma tela do meu projeto aula, eu tenho uma tela que tem dois selects input, um select input que recebe uma lista de (áreas) essas áreas contém diversos atributos associados a elas, como eu faço para quando eu selecionar uma (área) o outro select input de atributos atualizar com os atributos que são referentes a área que foi selecionada.

Alguém poderia colocar um exemplo completo, deis do método no controller e a chamada AJAX, ou outra forma de fazer isso ?

6 respostas

Talvez alguém tenha um exemplo completo, não é meu caso. De todo jeito, aqui tem os passos que vc deve seguir:

  • Associar um evento de click no select de áreas
  • Dentro do evento, pega o id da área selecionada e faz uma chamada ajax que recupera as informações
  • No callback do ajax, vc pega os dados e usa javascript para popular o outro select.

Você pode fazer isso usando javascript puro, ou uma lib tipo jquery.

Seria legal um exemplo mesmo, da chamada do ajax para um método no controller e o formato de retorno para a tela em tempo de execução, para mim ficaria mais fácil de entender vendo algo ehehehhe.

Entendi.. vamos esperar para ver se alguém coloca um exemplo.

solução!

Pessoal fiz uma solução , mas acho que da para melhorar , mas preciso de vocês.

então tenho dois campos selects :

<div class="span3">
    <label for="area">Área:</label>
    <select name="area" id="area">
         .....
     </select> 
    <label for="amostra">Amostra:</label>
    <select name="amostra" id="amostra" disabled="true">       </select>                        
</div>

Criei um javascript

$('.area').change(function () {
    $.ajax({
        type: "GET",
        contentType: "application/json; charset=utf-8",
        url: "http://localhost:8084/Projeto/buscaAmostrasDaArea?idArea="+this.value, -- esse caminho teria outra forma de colocar ?
        dataType: "json",
        success: function (data) {
            var appenddata = '<option>Selecione a amostra</option>';           
            $.each(data, function (key, value) {
                appenddata += "<option value=\"" + value.codigo + "\">" + value.descricao + " </option>";
            });
            document.getElementById("amostra").disabled = false;
            $('#amostra').html(appenddata);

        }
    });
});

e uma função que retorna as amostras da area no controller

 @Get("/buscaAmostrasDaArea")
    public void buscaAmostrasDaArea(Long idArea){
        AmostraDao amostraDao = DaoFactory.amostraDaoInstance();             
        List<AmostraEntity> amostras = amostraDao.findByIdArea(idArea);
        result.use(Results.json()).withoutRoot().from(amostras).serialize();
    }

Vou ser sincero, acho que fico bem ok. Se vc quiser agora, que a lógica ta clara, pode procurar algum plugin do jquery que facilite isso para vc. Parabéns!

Obrigado Alberto, agradeço a ajuda.