donny
Novembro 29, 2012, 11:19am
#1
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()+'.');
}
}
});
donny
Novembro 29, 2012, 11:41am
#3
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
donny
Novembro 29, 2012, 2:29pm
#5
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!