Skip to content

Instantly share code, notes, and snippets.

@dtelaroli
Last active August 29, 2015 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dtelaroli/abdfd1ba4ef01abcf18b to your computer and use it in GitHub Desktop.
Save dtelaroli/abdfd1ba4ef01abcf18b to your computer and use it in GitHub Desktop.
Exemplo de uso do Thymeleaf com VRaptor
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
@ApplicationScoped
public class ThymeleafComponent {
private TemplateEngine templateEngine;
private WebContext ctx;
private HttpServletRequest request;
private HttpServletResponse response;
private ServletContext servletContext;
private String template;
private DefaultControllerTranslator defaultControllerTranslator;
private MutableRequest mutableRequest;
private ControllerMethod method;
@Deprecated
public ThymeleafComponent() {
}
@Inject
public ThymeleafComponent(HttpServletRequest request, HttpServletResponse response, ServletContext servletContext,
DefaultControllerTranslator defaultControllerTranslator, MutableRequest mutableRequest) {
this.request = request;
this.response = response;
this.servletContext = servletContext;
this.defaultControllerTranslator = defaultControllerTranslator;
this.mutableRequest = mutableRequest;
}
@PostConstruct
public void init() {
method = defaultControllerTranslator.translate(mutableRequest);
template = defaultTemplate();
createTemplateEngine();
ctx = createWebContext();
}
private String defaultTemplate() {
return method.getMethod().getName();
}
private void createTemplateEngine() {
templateEngine = new TemplateEngine();
ServletContextTemplateResolver templateResolver = createTemplateResolver();
templateEngine.setTemplateResolver(templateResolver);
}
private ServletContextTemplateResolver createTemplateResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setTemplateMode("XHTML");
templateResolver.setPrefix("/WEB-INF/jsp/"+ controllerName() +"/");
templateResolver.setCacheTTLMs(3600000L);
templateResolver.setSuffix(".jsp");
return templateResolver;
}
private WebContext createWebContext() {
return new WebContext(request, response, servletContext, request.getLocale());
}
private String controllerName() {
return StringUtils.lowercaseFirst(method.getController().getType().getSimpleName().replace("Controller", ""));
}
public void template(String templateName) {
template = templateName;
}
public void process() {
try {
templateEngine.process(template, ctx, response.getWriter());
} catch (IOException e) {
e.printStackTrace();
}
}
public void include(String key, Object value) {
ctx.setVariable(key, value);
}
}
@RequestScoped
public class ThymeleafResult implements View {
private ThymeleafComponent thymeleafComponent;
private DefaultResult defaultResult;
@Deprecated
public ThymeleafResult() {
}
@Inject
public ThymeleafResult(DefaultResult defaultResult, ThymeleafComponent thymeleafComponent) {
this.defaultResult = defaultResult;
this.thymeleafComponent = thymeleafComponent;
}
public ThymeleafResult withTemplate(String name) {
thymeleafComponent.template(name);
return this;
}
public View include(String key, Object value) {
thymeleafComponent.include(key, value);
return this;
}
public <T extends View> T use(Class<T> view) {
return defaultResult.use(view);
}
@PreDestroy
public void render() {
thymeleafComponent.process();
}
}
@Controller
public class UserController {
@Inject private Result result;
public UserController() {
}
public void index() {
result.use(ThymeleafResult.class).include("user", "Foo");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment