Saltar al contenido principal

DSL de Kotlin para webforJ

Vista previa

Escríbelo en Kotlin. Conserva tu Java.

El DSL de Kotlin permite crear interfaces de usuario con webforJ mediante una sintaxis concisa y con seguridad de tipos. En lugar de hacer llamadas imperativas, escribes código declarativo que se lee como una descripción de la pantalla y se compila en el mismo proyecto que tu código Java.

La clase que conoces, como constructor

  • Buttonse convierte enbutton()
  • TextFieldse convierte entextField()
  • FlexLayoutse convierte enflexLayout()
  • Breakse convierte en`break`()

Los botones, campos, diseños, diálogos, paneles laterales, listas y elementos HTML tienen uno cada uno, con el nombre de la clase en camelCase.

Una misma pantalla, dos idiomas

Lee Java. Luego, lee Kotlin.

Ambos lados construyen los mismos componentes con las mismas clases de webforJ. La versión de Kotlin omite los setters y las llamadas a add(): los componentes se anidan y la configuración se realiza en bloques.

JavaHelloView.java

@Route("/hello")
public class HelloView extends Composite<FlexLayout> {
private final FlexLayout self = getBoundComponent();
private TextField name = new TextField("What is your name?");
private Button greet = new Button("Say hello");

public HelloView() {
greet.setTheme(ButtonTheme.PRIMARY)
.addClickListener(e ->
Toast.show("Welcome, " + name.getValue() + "!",
Theme.SUCCESS));
self.add(name, greet);
}
}

KotlinHelloView.kt

@Route("hello")
class HelloView : Composite<FlexLayout>() {
private val self = boundComponent

init {
self.apply {
val name = textField("What is your name?")
button("Say hello") {
theme = ButtonTheme.PRIMARY
onClick {
Toast.show("Welcome, ${name.text}!", Theme.SUCCESS)
}
}
}
}
}

Lo que te ofrece el DSL

Constructores, bloques y lambdas

Cada función constructora crea un componente, lo agrega a su contenedor principal y ejecuta un bloque de configuración. El resto del DSL se basa en eso.

Bloques de configuración

El bloque recibe el componente como this, así que puedes establecer sus propiedades y llamar a sus métodos directamente.

textField("Email") {
placeholder = "you@example.com" // this.placeholder
required = true // this.required
onModify { validate() } // this.onModify(...)
}
  • Constructores con nombres de componentes

    Cada componente tiene una función con el nombre de su clase en camelCase. La mayoría recibe, antes del bloque, las opciones que se configuran con más frecuencia, como una etiqueta o un texto de marcador de posición.

  • Bloques anidados

    Los componentes que contienen elementos secundarios aceptan llamadas DSL anidadas en su bloque, por lo que el código refleja la estructura de la pantalla.

  • Eventos como lambdas

    Los listeners usan métodos con el prefijo on que reciben una lambda, como onClick y onModify.

  • Seguridad del ámbito

    Los elementos secundarios solo se agregan a componentes que los admiten. Agregarlos por error a un ámbito externo no compila.

  • Estilos y nombres de clases

    La propiedad styles permite acceder a las propiedades CSS mediante corchetes, igual que setStyle() en Java. Los nombres de clase se añaden con +=.

  • Junto a tu código Java

    Kotlin se compila en bytecode de la JVM. Usa componentes compuestos de Kotlin desde clases Java y anida componentes Java en bloques DSL con add().

Ampliación del DSL

Tus propios componentes, también como constructores

Los componentes personalizados y las bibliotecas de terceros se incorporan al DSL mediante una función de extensión en HasComponents. El helper init añade el componente a su elemento padre, ejecuta el bloque y lo devuelve. Los componentes compuestos que crees con el DSL obtienen una función del mismo modo.

StarRating.kt
fun @WebforjDsl HasComponents.starRating(
block: @WebforjDsl StarRating.() -> Unit = {}
): StarRating {
return init(StarRating(), block)
}
Ampliación del DSL en la documentación

Cómo empezar

Añadir Kotlin a un proyecto Maven

El DSL de Kotlin está disponible a partir de webforJ 25.12. Un proyecto que ya se compila con Maven necesita una dependencia y un plugin.

  1. 1

    Añadir las dependencias

    Añade el módulo DSL de Kotlin de webforJ y la biblioteca estándar de Kotlin a tu pom.xml.

  2. 2

    Añadir el complemento de Maven para Kotlin

    Compila tus fuentes de Kotlin y Java en una sola compilación. No necesitas instalar Kotlin por separado.

  3. 3

    Añade Kotlin junto a Java

    Los archivos Kotlin pueden ir en su propia carpeta de código fuente o en la misma carpeta que los archivos Java.

  4. 4

    Escribe una vista y compila.

    Escribe una vista con los builders. Luego, Maven compila tu código Kotlin junto con Java.