Vraptor + selects dinamicas

Olá,

Estou desenvolvendo um Controller onde eu listo vários , mas um select depende do outro,

vamos supor eu selecione um medico em um, e ele lista as especialidades em outro, até ai tudo bem, eu consigo fazer
mas fica feio, eu acabei passando varios paramos no controller, não acredito que esteja ficando do geito certo.

Qual seria a melhor forma de fazer isso?

Segue meu controller

@Resource
public class AutorizadorController {

    Result result;
    CredenciadoDAO credDao;
    EspecialidadeDAO especDao;
    BeneficiarioDAO beneDao;
    LoginManager login;
    Local local;

    public AutorizadorController(Result result, CredenciadoDAO credDao,
            EspecialidadeDAO especDao, BeneficiarioDAO beneDao,
            LoginManager login) {
        this.result = result;
        this.credDao = credDao;
        this.especDao = especDao;
        this.beneDao = beneDao;
        this.login = login;
        this.local = null;
    }
    
    // esse que acredito que não está legal
    @Get
    @Path("/autorizador")
    public void autorizador(String sMed, String sLocal, String sCart, String sEspec) throws SQLException {

        if (this.login.isLogado() == false) {
            result.redirectTo(AcessoController.class).acesso();

        }



        this.result.include("listaCredenciado", this.credDao.listaCredLocal(1));


        if (sMed != null & sLocal != null) {
            int iMed = Integer.parseInt(sMed);
            int iLocal = Integer.parseInt(sLocal);

            try {
                this.result.include("listaEspecialidade", this.especDao.listaEspecMedicoLocal(iLocal, iMed));
            } catch (Exception ex) {
                result.redirectTo(ErroController.class).erro(ex.getMessage());
            }

        }


        if (sCart != null) {

            Beneficiario beneficiario = new Beneficiario();

            beneficiario = beneDao.pegaNomeBeneViaCart(sCart);


            this.result.include("cartBene", beneficiario.getCarteirinha());
            this.result.include("nomeBene", beneficiario.getNome());
            this.result.include("bloqBene", beneficiario.getBloqueado());
            this.result.include("cancBene", beneficiario.getCancelado());
            this.result.include("inadBene", beneficiario.getInadimplente());
        }

        if (sCart != null & sMed != "" & sEspec != "") {
            int iMed = Integer.parseInt(sMed);
            int iEspec = Integer.parseInt(sEspec);

            this.result.include("retBene", beneDao.getRetorno(sCart, iMed, iEspec));

        }



    }

    
    // aqui comecei a refazer ele
    //
    @Path("/autorizador2")
    public void autorizador2(Local local, Credenciado credenciado) {

        if (this.login.isLogado() == false) {
            result.redirectTo(AcessoController.class).acesso();
        } else {

            try {
                //int idlocal = local.getId();
                //this.result.include("listaCredenciado", this.credDao.listaCredLocal(local.getId()));
                this.result.include("listaCredenciado", this.credDao.listaCredLocal(local.getId()));

                if (credenciado != null) {

                    this.result.include("listaEspecCred", this.especDao.listaEspecMedicoLocal(local.getId(), credenciado.getCod()));

                }

            } catch (SQLException ex) {
                result.redirectTo(ErroController.class).erro(ex.getMessage());
            } catch (Exception ex) {
                result.redirectTo(ErroController.class).erro(ex.getMessage());
            }

        }





    }
}

fassoline, em um projeto que tenho essa mesma intenção eu fiz os métodos no vraptor retornando JSON assim:

public void fetchChildren(MyObject obj) { List<Foo> children = ... result.use(Results.json()).from(children).serialize(); }

Esse método me retorna o JSON com todos os filhos conforme o objeto selecionado. No JSP basta você fazer as chamadas para esses métodos anexado ao evento onchange de cada . Usei auxílio do Jquery.

Enfim, te passei apenas a idéia. Você precisa de ajuda com código? Se sim posso ajudar.

Abraços

resolvido.

Compartilhe a solução aqui no fórum, pois pode ajudar outra pessoa que tenha a mesma dúvida.

Abraços