[RESOLVIDO]VRaptor + chamada AJAX

Tenho o código abaixo que faz um post para o controller passando alguns parâmetros. O último parâmetro está com problema de “enconding”, estou pegando de um input o texto “PONTO A”, na url e no controller está passando “PONTO%20A”.

 http://localhost:8080/CLog/monitorcoletaresiduo/tratarevento/95/8a828b833b4c2bf0013b4c4a6b2e0089/PONTO%20A

Código JavaScript:

          function tratarEvento(){
              
	           	var id = $('#dispositivoVeiculo').val();
	        	var idgps = $('#idGps').val();
	        	var dsPonto = $('#ponto').val();
	       		var url = '<c:url value="/monitorcoletaresiduo/tratarevento/"/>'+ id + "/" + idgps+ "/" + dsPonto;
	
	   			$.post(url, function(response, status, xhr) {
	   				if (status == 'success') {
	       	    	  trocarIcone($('#idJanela').val());
	       	    	  auto_reload();
	   				}else{
	       				alert('Ocorreu um erro ao tentar tratar o evento para o veículo ' + $('#placa').val()+'.');
	   				}
	   			});	
          }

Código do Controller:

	@Transactional
	@Post
	@Path("/monitorcoletaresiduo/tratarevento/{id}/{idgps}/{dsPonto}")
	@PermissaoAcesso(permissao=Permissao.COLETA_RESIDUO_TRATAR_EVENTO)
	public void tratarEvento(long id, String idgps, String dsPonto) {
}

Alguém conhece uma solução para isso?

Cara, não pode ter espaço na URL, por isso ele substitui para o código ASCII do espaço, o %20.

Por você estar fazendo um Post, você não deveria passar os parâmetros via URL e sim pelo atributo data do ajax…

$.ajax({ url: '<c:url value="/monitorcoletaresiduo/tratarevento/"/>', data: { id: id, idgps: idgps, dsPonto: dsPonto }, success: function(response){ if (status == 'success') { trocarIcone($('#idJanela').val()); auto_reload(); }else{ alert('Ocorreu um erro ao tentar tratar o evento para o veículo ' + $('#placa').val()+'.'); } } });

Obrigado pela dica, vou testar!

os parametros que são ids podem estar na url, mas esse que é um texto é melhor ser via query param mesmo

Funcionou! Segue abaixo o código do javascript:

          function tratarEvento(){

	           	var id = $('#dispositivoVeiculo').val();
	        	var idgps = $('#idGps').val();
	        	var dsponto = $('#ponto').val();

              $.ajax({
           	   url: '<c:url value="/monitorcoletaresiduo/tratarevento/"/>',
           	   type: 'POST',
           	   data: {
           	      id: id,
           	      idgps: idgps,
           	      dsponto: dsponto
           	   },
           	   success: function(response){
           	      trocarIcone($('#idJanela').val());  
           	      auto_reload();  
           	   },
           	 error: function(response){
           		 alert('Ocorreu um erro ao tentar tratar o evento para o veículo ' + $('#placa').val()+'.');  
           	   }
           	});
              
          }

Código do método do Controller:

[code]

@Transactional
@Post
@Path("/monitorcoletaresiduo/tratarevento/")
@PermissaoAcesso(permissao=Permissao.COLETA_RESIDUO_TRATAR_EVENTO)
public void tratarEvento(long id, String idgps, String dsponto) {
	try{
		//Implementação...
                    result.use(Results.json()).from("OK").serialize();
		
	}catch (Exception e) {
		e.getMessage();
		e.printStackTrace();
		result.use(Results.json()).from("ERRO").serialize();
	}
}[/code]

Obrigado pela ajuda!