[RESOLVIDO] VRaptor + Ajax + Mysql - busca em ajax

o problema é o seguinte:

        estou fazendo uma busca em ajax com o vraptor, hibernate e o DB é mysql. 

       estou trabalhando em uma página de agendamento, quando escolho a data e o horário dou um submit no form e tudo isso funciona de forma exemplar quando a página é carregada pela primeira vez.

       eu faço a busca dos horários em ajax de acordo com a escolha da data selecionada, a busca é bem sucedida, porém, quando faço uma busca de horários na mesma data o horário que eu marquei anteriormente permanece na lista, sendo que, se eu entrar na página novamente (clicando no link) esse horário que já foi escolhido não me é retornado (que é o correto), olho no banco e o cadastro do horário consta de forma correta.

eu já tentei das seguintes formas:


        // com result.include("horarios", horarios).forwardTo(this).horariosDisponiveis();

	@Get("/horario/horariosDisponiveis")
	public void horariosDisponiveis(String data){

		List<AteHorario> horarios = null;

		setMsg(new ArrayList<String>());
		
		if (!Valida.isEmpty(data)) {
			
			setMsg(horarioBusinessFacade.isDataValida(data));
			
			if (Valida.isEmpty(getMsg())) {

				horarios = new ArrayList<AteHorario>();
				horarios.addAll(horarioBusinessFacade.consultar("dtDisponivel", data));

				for (AteHorario horario : horarios) {
					log.info(horario);
				}

			} else {

				result.include("error", getMsg());

			}
		}
		
		result.include("horarios", horarios).forwardTo(this).horariosDisponiveis();
		
	}

// 	com	result.include("horarios", horarios).redirectTo(this).horariosDisponiveis();

public void horariosDisponiveis(String data){

		List<AteHorario> horarios = null;

		setMsg(new ArrayList<String>());
		
		if (!Valida.isEmpty(data)) {
			
			setMsg(horarioBusinessFacade.isDataValida(data));
			
			if (Valida.isEmpty(getMsg())) {

				horarios = horarioBusinessFacade.consultar("dtDisponivel", data);

				for (AteHorario horario : horarios) {
					log.info(horario);
				}

			} else {

				result.include("error", getMsg());

			}
		}
		
		result.include("horarios", horarios).redirectTo(this).horariosDisponiveis();
		
	}

chamada pelo link


	public void cadastrar () {
		
		tabelaDePrecosBusinessFacade = new AteServicoBusiness();
		agendamentoBusinessFacade = new AteAgendamentoBusiness();
		
		ICadAnimalBusinessFacade animalBusinessFacade = new CadAnimalBusiness();
		
		List<AteServico> servicos = tabelaDePrecosBusinessFacade.consultar(null, null);
		
		List<AteAgendamento> agendamentosConfirmados = agendamentoBusinessFacade.consultar("confirmadosNaoCancelados", null);
		
		List<CadAnimal> animals = new ArrayList<CadAnimal>();
		for (AteAgendamento agendamento : agendamentosConfirmados) {
			
			animals.add(agendamento.getAnimal());
			
		}
		
		animalBusinessFacade.buscarNomePessoaAnimal(animals);
		
		result.include("servicos", servicos).include("agendamentos", agendamentosConfirmados);
		
	}
	
      como podem notar eu até criei/sobrecarga um método separado para fazer o redirecionamento;
      eu já utilizei o redirectTo;
      eu já utilizei o forwardTo;

     isso é limitação do framework, do banco ... ou minha ... ??!? não sei o que mais tentar ... se alguém puder dar uma ajuda ... agradeço!

consegui resolver, coloquei uma gambiarra … se alguém souber um jeito melhor (o correto) ou tiver uma explicação para o ocorrido é só postar.

fiz o seguinte:


	@Post("/agendamento/create")
	public void create (AteAgendamento agendamento) {
		// TODO Auto-generated method stub
		
		agendamentoBusinessFacade = new AteAgendamentoBusiness();
		
		CadFuncionario funcionario = (CadFuncionario) request.getSession().getAttribute("funcionario");
		
		agendamento.setFuncionarioAlteracao(funcionario);
		agendamento.setDtConfirmacao(Calendar.getInstance());
		
        setMsg(agendamentoBusinessFacade.create(agendamento));
        
        if (Valida.isEmpty(getMsg())) {
        	
        	setMsg(new ArrayList<String>());
        	
        	getMsg().add(agendamentoSucesso.toString());
        	result.include("msg", getMsg());
        	
        } else {
        	
        	result.include("error", getMsg());
        	        	
        }
		
        // deste trecho para baixo foi a gambiarra que coloquei
       // coloquei um contador e um while para fazer algo parecido com um refresh num suposto cache. meio estranho, mas ... 
        int count = 1;
		while (count != 0) {

			result.forwardTo(this).cadastrar();
			
			if (count > 3) {
				count = 0;
			} else count++;
						
			log.info("VALOR DO COUNT: " + count);
			
		}

	}
	

parece que estava guardando algum tipo de cache ou sei lá o que. quando coloquei para redirecionar mais de uma vez “parece” que limpou o que eu acho que seja cache.

vc tentou trocar o forwardTo por redirectTo e remover o while?

falaei Lucas, blz!?

se tu ver o primeiro post e a segunda solução que tentei, tu verá que estava conforme manda a convenção do VRaptor, com o redirectTo (e eu dou preferência a convenção sempre), porém, a mesma estava com esse problema - ou bug. por conta disto eu alterei para “forwardTo”, mas resolveu em parte, porém, a partir do momento que eu coloquei a gambiarra (eu odeio isso) do while passou a funcionar da forma esperada.

TL;DR, sorry

eu não entendi o problema que está acontecendo…

o parametro String data está vindo incorreto?

ou os includes que vão pro jsp estão indo incorretos?

se vc dá include(xxx, “x”) e depois dá o redirect ou forward, o x vai pro outro lado, mas se a lógica que vc deu redirect tb incluir o “x”, vai sobrescrever.