Thymeleaf
Ratpack bietet Module, die die Template-Engine Thymeleaf unterstützen.
build.gradle
dependencies {
compile "io.ratpack:ratpack-thymeleaf:${ratpack}"
}
Fügen Sie ein Modul hinzu.
Function<Registry, Registry> registry = ratpack.guice.Guice.registry( bindings -> {
bindings.module( new ThymeleafModule() );
} );
Standardmäßig erkennt das Thymeleaf-Modul * .html
-Dateien unter $ {BaseDir} / thymeleaf
als Vorlagen. Daher ist es notwendig, "BaseDir" zu setzen.
ServerConfig.builder()
.development( true )
.findBaseDir( "public/.ratpack" )
In diesem Fall wird "public / thymeleaf" als Vorlagenverzeichnis betrachtet.
Das Modul registriert einen "Renderer" für die "ratpack.thymeleaf.Template" -Klasse. Beachten Sie, dass es kein Renderer ** für Thymeleafs IContext
** ist. Template
kann mit der Template.thymeleafTemplate ()
Methode erstellt werden.
Action<Chain> handlers = chain -> {
chain.get( "/:name?", ctx -> {
String name = ctx.getPathTokens().get( "name" );
name = name.isEmpty() ? "world" : name;
ctx.render( Template.thymeleafTemplate( ImmutableMap.of( "name", name ), "template" ) );
} );
};
Die Zuordnung des ersten Arguments ist die Bindung des Parameters, und das zweite Argument ist der Name der Vorlage. Wenn "BaseDir" "public / .ratpack" ist, lautet die tatsächlich aufgelöste Datei "public / thymeleaf / template.html".
Die Vorlagendatei entspricht genau einem normalen Thymeleaf.
template.html
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" />
</head>
<body>
<h1 th:text="'hello, ' + ${name}"></h1>
</body>
</html>
Wie Sie sehen können, ist die Verwendung von Thymeleaf sehr einfach. Die Modulimplementierung selbst ist einfach zu erstellen, sofern Sie eine Klasse haben, die die Vorlage darstellt, und eine Implementierung des Renderers, der die Vorlagen-Engine umschließt. Ich denke, es wäre einfach, Velocity und andere Template-Engines mit einem ähnlichen Muster zu unterstützen.
~~ Die vom Ratpack-Beamten bereitgestellten Module sind derzeit (Februar 2018) bis Thymeleaf 2.1.5. Version 3 wird nicht unterstützt (ich habe es selbst implementiert, da es nicht geholfen werden kann - Werbung). ~~ Offiziell unterstützt in 1.6.0 und höher. Bitte benutzen Sie das.
Recommended Posts