Olá,
Em um projeto com VRaptor 3, eu precisei pegar dinamicamente a URI de um recurso anotado com VRaptor. Isto para que eu pudesse montar um email com uma URL de confirmação de email. Aqui no forum me ajudaram e eu criei um componente que chamei de Linker:
[code]@Component
public class Linker {
private Proxifier proxifier;
private Router router;
private HttpServletRequest request;
private Class<?> clazz;
private Method invokedMethod;
private Object[] arguments;
public Linker(Proxifier proxifier, Router router, HttpServletRequest request) {
this.proxifier = proxifier;
this.router = router;
this.request = request;
}
public String getURL() {
return "http://" + request.getHeader("Host") + request.getContextPath()
+ getURI();
}
private String getURI() {
return router.urlFor(clazz, invokedMethod, arguments);
}
public <T> T buildLinkTo(Class<T> clazz) {
this.clazz = clazz;
return proxifier.proxify(clazz, new MethodInvocation<T>() {
@Override
public Object intercept(T proxy, Method method, Object[] args,
SuperMethod superMethod) {
invokedMethod = method;
arguments = args;
return null;
}
});
}
}[/code]
E com ele usei mais ou menos assim:
[code]
linker.buildLinkTo(EmailConfirmationController.class).confirm(null);
String url = linker.getURL();
url = url.substring(0, url.length() - 1);
String confirmationLink = url + "/" + user.getEmail();
linker.buildLinkTo(RootController.class).index();
String homeUrl = linker.getURL();
String body = labeler.translate("email.confirmation.html.msg", homeUrl, confirmationLink);[/code]
Desta maneira consegui montar o email com os links de forma dinamica.
Hoje, usando VRaptor 4, estou com o mesmo problema. Existe uma maneira mais facil de resolver este problema ? Se não, podem me ajudar a escrever um “Linker” adaptado para o VRaptor 4?
Muito obrigado.