Bom dia amigos, estou com um problema que acredito que seja algo que eu estou fazendo errado. Estou fazendo uma aplicação que funcionará utilizando as requisições ajax. Pensei em fazer assim:
-> Ao acessar a página inicial (index), será montado o seu conteúdo fazendo uma requisição (ajax) para ou a página de login, ou a página inicial (home).
Até este ponto funciona normalmente, o problema ocorre ao postar as validações do formulário (clicar no botão login) que ao invés de retornar usando o ajax, ele direciona a página ignorando as introduções ajax - como se tivesse feito uma requisição normal.
Abaixo, coloco os fontes…
IndexController: Controle da página inicial
@Resource
public class IndexController {
@Path("/")
public void index() {}
}
WEB-INF/jsp/index/index.jsp
<html>
<head>
...
<script type="text/javascript" src="js/functions.js"></script>
<script type="text/javascript">
$(document).ready(function() {
//Carrega conteúdo
showContent('home');
//Clique do form de Login
$('#formLogin button').live('click', function() {
loginHandler();
});
});
</script>
</head>
<body>
...
<div id="conteudo">
<div id="carregando"><img src="imagens/carregando.gif" /></div>
</div>
...
</body>
</html>
function.js: Tem as funções de requisição (ainda não foi refatorado)
function showContent(url) {
//Carrega conteúdo
$('#carregando').show().fadeIn('fast');
$.ajax({
url: url,
success: function(resultado) {
...
$('#conteudo').append(resultado);
},
error:function (xhr){
showErrorDetalhe(xhr.status +' - '+ xhr.statusText )
}
});
$('#carregando').hide().fadeOut('fast');
}
function loginHandler() {
var params = $('form').serialize();
$('#carregando').show().fadeIn('fast');
$.ajax({
url: 'login',
dataType: 'html',
data: params,
type: 'post',
success: function(resultado) {
...
$('#conteudo').append(resultado);
},
error:function (xhr){
showErrorDetalhe(xhr.status +' - '+ xhr.statusText )
}
});
$('#carregando').hide().fadeOut('fast');
return false;
}
HomeController
@Resource
public class HomeController {
private final Result result;
public HomeController(Result result) {
this.result = result;
}
@Get @Path("/home")
@Restrito
public void index() {
}
}
UsuarioController
@Resource
public class UsuarioController {
private final AlunoDao dao;
private final Usuario usuario;
private final Result result;
private final Validator validator;
public UsuarioController (AlunoDao dao, Result result, Validator validator,
Usuario usuario) {
this.dao = dao;
this.usuario = usuario;
this.result = result;
this.validator = validator;
}
@Get @Path("/login")
public void loginForm(){
}
@Post @Path("/login")
public void login(Aluno aluno){
Aluno carregado = this.dao.existeUnico(aluno);
if (carregado == null) {
validator.add(new ValidationMessage("O E-mail e/ou Senha não constam em nosso Banco de Dados", "usuario.login"));
}
validator.onErrorUsePageOf(UsuarioController.class).loginForm();
this.usuario.login(carregado);
result.redirectTo(HomeController.class).index();
}
@Path("/logout")
public void logout() {
usuario.logout();
result.redirectTo(UsuarioController.class).loginForm();
}
}
Poderiam me ajudar por favor?