Mas no caso da diferença entre o validator e o result… como eu faria?
Era exatamente isso que eu estava procurando, alguma forma da pessoa não encostar no que já estava pronto…
Eu estava fazendo um refactor para um método private… dai eu tirei… sei lá pq…
pode usar result mesmo, vai funcionar…
no caso do validator a diferença é que ele só executa o código se houveram erros, mas as implementações continuam usando result por baixo
Eu preciso informar alguma coisa na minha interface?
Pois aparentemente o VRaptor não está encontrando…
org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [br.com.warriorsoft.interfaces.LastAnnotated] is defined: expected single bean but found 0:
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:269)
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1083)
br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:86)
br.com.caelum.vraptor.core.DefaultResult.use(DefaultResult.java:57)
br.com.wsacervoweb.controller.ConsultaController.aplicaFiltro(ConsultaController.java:169)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:89)
br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:23)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
a implementação precisa estar anotada com @Component
e está… Eu tentei até criar um component Factory… mas também não deu certo…
o @Component é o do VRaptor? a classe implementa LastAnnotated? a classe está no WEB-INF/classes ou dentro de um jar?
O @Component é do VRaptor.
A classe implementa LastAnnotated.
E tudo está dentro de um jar.
se está dentro do jar vc precisa declarar o pacote no web.xml,
<context-param>
<param-name>br.com.caelum.vraptor.packages</param-name>
<param-value>br.com.pacote.do.plugin</param-value>
</context-param>
ou gerar o jar com o arquivo META-INF/br.com.caelum.vraptor.packages contendo br.com.pacote.do.plugin
Fiz a configuração do web-xml, funcionou lindo lindo!! mas como que eu faço essa coisa ai no META-INF…
Gostaria de entregar o jar e a pessoa não precisar fazer nadinha…
-Edit-
E a parte do import estático não funcionou…
como vc fez o import estático?
Ele só funciona (static) se eu importar a DefaultLastAnnotated…
sim, é isso mesmo 
vc pode fazer:
import static br......DefaultLastAnnotated.lastAnnotated;
...
result.use(lastAnnotated())....
É…
Agora eu vou começar a procurar bugs e fazer o JavaDoc… Você se importa se eu colocar o seu nome na maioria (quase todas) as classes?
Existe alguma forma de saber quem foi que chamou o método?
Por exemplo, se a pessoa anotar um método e nele pedir para redirecionar para o anterior, vai voltar para o mesmo…
como assim quem chamou o método?
o método que rodou o result.use(lastAnnotation())?
Isso, por exemplo se esse método for anotado com @CaptureMethod, ele será o alvo do redirecionamento.
tem com a stacktrace, mas é bem zoado fazer isso…
eu achei que vc estava sempre voltando pra última requisição para algum método anotado com @CaptureMethod
Então, eu estou, mas para pra pensar no seguinte caso:
@CaptureMethod
@Get("/path")
public void fazAlgo(){
result.use(lastAnnotated()).redirect();
}
é só vc capturar o método sempre na volta…
ao invés de:
captura
stack.next(...)
faça
stack.next(...)
captura
Eu tinha pensado nisso… Mas não tinha certeza se funcionaria…
Então, como faço o arquivo dentro de META-INF?
E posso colocar seu nome no javadoc do projeto?
pode colocar meu nome se quiser sim 
qdo for criar o jar, precisa existir esse arquivo na pasta META-INF
META-INF/br.com.caelum.vraptor.packages
e o conteúdo desse arquivo precisa ser o pacote base do plugin.
vc consegue fazer isso colocando esse arquivo na sua pasta src (ou src/main/resources)
e dependendo de como vc está gerando o jar, vc precisa mandar incluir esse arquivo no jar. Como vc está gerando?