Boa Noite a todos,
Estive lendo quase todos os tópicos referente a este assunto de validação retornando um Json para o ExtJS, mas infelizmente não sanei minhas dúvidas.
Realizei vários testes com todas as formas sugeridas em vários posts, até que cheguei em uma codificação que acredito estar mais perto doq preciso.
Apenas necessitando ajustar alguns detalhezinhos. :lol:
Um dos motivos que acredito serem responsáveis pelo meu insucesso, é por se tratar de tópicos antigos, da época que o VRaptor não tinha todos os recursos que tem hoje.
O Cenário é o seguinte: Tenho um formularios de Login, que chega na Controller sem problemas, realiza a validação utilizando validator.checking(), mas depois não consigo retornar um Json válido em caso de erro ou em caso de sucesso.
LoginController.java
@Get
@Path("/")
public void loginForm() {
// Direciona para WEB-INF\jsp\login\loginForm.jsp
}
@Post
@Path("/login")
public void login(SegUsuario segUsuario) {
final SegUsuario usuarioLogado = segUsuarioDAO.carrega(segUsuario);
validator.checking(new Validations() {{
that(usuarioLogado != null, "error", localization.getMessage("usuario.login"));
}});
validator.onErrorUse(ExtJSJson.class).from(validator.getErrors()).success(Boolean.FALSE).serialize();
usuarioWeb.login(usuarioLogado ); // AUTENTICANDO NA SESSAO O USUARIO LOGADO
result.use(ExtJSJson.class).from("").success().serialize();
}
Este código na controller está gerando a seguinte saída no FireBug:
uncaught exception: You're trying to decode an invalid JSON String: {"data": [{"category": "error","message": "Usuýrio e/ou Senha invýlidos!","parameters": []}],"success": false}{"data": "","success": true}
Alguem poderia me auxiliar neste caso? De que forma devo proceder nestas situações em que meu JS está esperando um {success: true/false} p/ realizar as ações…
handler do botão de “Entrar no sistema”
function doLogin(){
if(loginForm.getForm().isValid()) {
loginForm.getForm().submit({
method:'POST',
waitTitle: 'Efetuando login no sistema',
waitMsg: 'Verificando informações...',
success: function(){
loginForm.getForm().reset();
var redirect = '/main';
window.location = redirect;
},
failure: function(form, action){
if(action.failureType === 'server'){
obj = Ext.decode(action.response.responseText);
Ext.Msg.show({
title : 'Falha no login!',
msg : obj.data[0].message,
buttons : Ext.Msg.OK,
icon : Ext.MessageBox.ERROR,
scope : this,
width : 150
});
}else{
Ext.Msg.alert('Atenção!', 'Não foi possível autenticar no sistema : ' + action.response.responseText);
}
loginForm.getForm().reset();
}
});
}
};
Valeu pessoal.