Humm… isso foi muito util…
Eu fiz assim e funcionou:
Ajax:[code]Essa eh a string que o metodo retorna agora: ${string}
<c:if test="${not empty usuarioWeb.listaCenarios}">
<select id=“cenario” name=“cenarios” title=“Selecione um cenário!” class=“tooltip”>
<c:forEach items="${usuarioWeb.listaCenarios}" var=“cenario”>
<c:if test="${cenario.id eq usuarioWeb.idCenario}">
<option id="${cenario.id}" selected=“selected”>${cenario.titulo}</option>
</c:if>
<c:if test="${cenario.id ne usuarioWeb.idCenario}">
<option id="${cenario.id}">${cenario.titulo}</option>
</c:if>
</c:forEach>
</select>
<script>
$(document).ready(function(){
postJSON = function(url, data, dt, bs, s, e){
$.ajax({
type:"post",
url:url,
data:data,
dataType:dt,
beforeSend:bs,
success:s,
error:e
});
};
$("#cenario").change(function() {
postJSON('/website/cenario/escolha',
{id:$("#cenario option:selected").attr('id')},
"json",
function(xhr, settings){
alert("Antes de enviar!");
},
function(data, textStatus, xhr){
alert("Sucesso!");
},
function(xhr, textStatus, errorThrown){
alert("Erro!");
}
);
}).trigger('change');
});
</script>
</c:if>
<c:if test="${empty usuarioWeb.listaCenarios}">
vazio
</c:if>[/code]
Java:@Post("/escolha")
public void escolherCenario(Long id) throws Exception {
try{
Cenario cenario = cenDao.consultar(Long.parseLong(id.toString()));
this.usuarioWeb.setIdCenario(cenario.getId());
this.usuarioWeb.setTituloCenario(cenario.getTitulo());
//result.redirectTo(CenarioController.class).manterCenarios();
result.use(Results.json()).withoutRoot().from("Teste!").serialize();
}catch(Exception e) {
result.use(Results.status()).badRequest("Não foi possível escolher o cenário."); // Envie uma badRequest que vai retornar o erro 400 com essa mensagem.
}
}
beleza, assim ta 100% funcionando!
mas eu tive que deixar de redirecionar para o método que eu precisava e passei a retornar uma String de teste para a tela…
bem, eu nao preciso que esse método retorne nada, e eu preciso que redirecione para aquele outro método…
entao como devo fazer meu método Ajax?