Kotlin DSL
webforJ biedt een Kotlin Domain Specific Language, of DSL, waarmee je gebruikersinterfaces kunt bouwen met een beknopte, type-veilige syntaxis. In plaats van imperatieve Java-code schrijf je declaratieve code die leest als een beschrijving van de structuur van je UI.
FlexLayout layout = new FlexLayout();
layout.setDirection(FlexDirection.COLUMN);
layout.setSpacing("10px");
TextField name = new TextField();
name.setLabel("Naam");
name.setPlaceholder("Je naam");
layout.add(name);
Button submit = new Button("Verzenden", ButtonTheme.PRIMARY);
submit.onClick(e -> handleSubmit());
layout.add(submit);
flexLayout {
direction = FlexDirection.COLUMN
styles["gap"] = "10px"
textField("Naam", placeholder = "Je naam")
button("Verzenden", ButtonTheme.PRIMARY) {
onClick { handleSubmit() }
}
}
De DSL benut Kotlin-extensiefuncties, lambdas met ontvangers en standaardparameters om een natuurlijke bouwer-syntaxis te creëren. Componenten nestelen zich in elkaar, configuratie gebeurt in blokken, en de compiler vangt structurele fouten voor runtime op.
Setup
Er is geen aparte Kotlin-installatie vereist. Maven regelt de compilatie via de Kotlin Maven-plugin, dus elk project dat al met Maven bouwt, kan Kotlin-ondersteuning toevoegen met alleen configuratie van afhankelijkheden en plugins.
Om een webforJ-project met Kotlin snel aan de slag te krijgen met alle noodzakelijke configuraties, zie dit gedeelte over het gebruik van de webforJ Kotlin-starter.
Afhankelijkheden
Voeg de webforJ Kotlin DSL-module en de Kotlin-standaardbibliotheek toe aan je pom.xml:
<dependency>
<groupId>com.webforj.kotlin</groupId>
<artifactId>webforj-kotlin</artifactId>
<version>${webforj.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>${kotlin.version}</version>
</dependency>
Als je van plan bent om tests in Kotlin te schrijven, voeg dan ook de Kotlin-testafhankelijkheid toe. Deze integreert met JUnit:
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test</artifactId>
<version>${kotlin.version}</version>
<scope>test</scope>
</dependency>
Kotlin Maven-plugin
Voeg de Kotlin Maven-plugin toe om zowel je Kotlin- als Java-bronnen te compileren. De configuratie sourceDirs hieronder staat Kotlin- en Java-bestanden toe om in hetzelfde project te bestaan:
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>src/main/java</sourceDir>
<sourceDir>target/generated-sources/annotations</sourceDir>
<sourceDir>src/main/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>src/test/java</sourceDir>
<sourceDir>target/generated-test-sources/test-annotations</sourceDir>
<sourceDir>src/test/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
<configuration>
<jvmTarget>${maven.compiler.target}</jvmTarget>
</configuration>
</plugin>
Met deze toevoegingen compileert mvn compile de Kotlin-bronnen samen met Java. Kotlin-bestanden kunnen in src/main/kotlin of src/main/java worden geplaatst, en de plugin behandelt beide.
Kotlin compileert naar JVM-bytocode, dus het werkt samen met bestaande Java-code. Je kunt met DSL gebouwde Kotlin-composieten vanuit Java-klassen gebruiken, standaard Java-componenten binnen DSL-blokken verpakken met add(), en Kotlin- en Java-bestanden in hetzelfde project mixen.
Kotlin-starterproject
Als je de handmatige configuratie wilt overslaan, biedt de webforJ Kotlin Starter repository een kant-en-klaar project met alle afhankelijkheden en pluginconfiguraties al ingesteld. Clone het en begin meteen met bouwen met de DSL.
Onderwerpen
De volgende onderwerpen behandelen het gebruik van de DSL, evenals het uitbreiden ervan met aangepaste componenten of composieten die je maakt.
📄️ Using the DSL
De Kotlin DSL biedt bouwfuncties voor webforJ-componenten. Elke functie maakt een component, voegt het toe aan een bovenliggend container en voert een configuratieblok uit. Deze pagina behandelt de patronen en conventies die je zult gebruiken bij het bouwen van gebruikersinterfaces met de DSL.
📄️ Extending the DSL
De Kotlin DSL is uitbreidbaar, waardoor je DSL-functies voor aangepaste componenten of derde-partijbibliotheken kunt toevoegen. Je kunt samengestelde componenten bouwen die de DSL intern gebruiken.