Vraptor 3.1.1 - Erro ao usar forwardTo e redirectTo [resolvido]

2 respostas
G

Tenho um CustomResult que nada mais é que um Result customizado que comporta alguns métodos para exception handler, e essa classe nada mais é que um delegate para a DefaultResult.

O método chave é o que está abaixo.

public <T> T onErrorUse(Class<T> controller) {
        return proxifier.proxify(controller, new MethodInvocation<T>() {

            @Override
            public Object intercept(T proxy, Method method, Object[] args, SuperMethod superMethod) {
                CustomResult.this.method = method;
                CustomResult.this.args = args;
                return null;
            }

        });
    }

Os demais métodos, como já citei antes, são apenas um delegate para DefaultResult, exemplo:

@Override
    public <T> T forwardTo(Class<T> controller) {
        return delegate.forwardTo(controller);
    }

Após eu atualizar meu jar do vraptor para o 3.1.1 minhas chamadas conforme abaixo que antes fazia forward para o método da action agora faz forward ou redirect para o JSP (exemplo /WEB-INF/jspx/logicresult.redirectto.jspx).

result.onErrorUse(Results.logic()).redirectTo(getClass()).changePassword();

Houve alguma mudança que possa ter impactado nesses meus componentes customizados?

2 Respostas

Lucas_Cavalcanti

bom… no 3.1.1 foram adicionados métodos de atalho… mas não acho que tenha impactado nisso…

o problema é que ele não está chamando a lógica? ou ele está mandando pro jsp errado? dá uma olhada no que o CustomResult.method e CustomResult.args está guardando…

os métodos de atalho vc deveria delegar pro this pra sua lógica funcionar, se vc delegar pro delegate vai dar pau…

ex:

public class CustomResult ...{
   ...
   public <T> T forwardTo(Class<T> controller) {
        return this.use(logic()).forward(controller);
   }
}
G

Lucas, quando você escreveu eu estava vindo aqui escrever que sou uma mula mesmo. O correto é como você falou. Não sei porque raios eu acabei usando o onErrorUse com o Results.logic, sendo que o correto é colocar direto minha classe :oops:

Um pequeno detalhe que fez uma diferença danada. Notei que estava errado porque em outro código meu estava funcionando, apenas aqui que não.

Abraços, e obrigado Lucas :oops:

Criado 6 de abril de 2010
Ultima resposta 6 de abr. de 2010
Respostas 2
Participantes 2