Overslaan naar hoofdinhoud

Data Binding

Openen in ChatGPT

webforJ omvat een gegevensbinding-functie die UI-componenten integreert met backend-gegevensmodellen in Java-toepassingen. Deze functie overbrugt de kloof tussen de UI en de gegevenslaag, zodat wijzigingen in de UI worden weerspiegeld in het gegevensmodel en vice versa, wat de complexiteit van gebeurtenisafhandeling en gegevensynchronisatie vermindert.

AI skill available

The webforj-building-forms skill can build forms with binding, validation, and input masks. After installing the webforJ AI plugin, ask your assistant:

  • "Build a registration form bound to my User bean."
  • "Add a phone number input with format-as-you-type."
  • "Format this Table column as currency."

Concept

De onderstaande demonstratie toont een eenvoudige webforJ-app voor het registreren van superhelden met behulp van webforJ-gegevensbinding. De app bestaat uit twee hoofdonderdelen: HeroRegistration.java en Hero.java.

In HeroRegistration.java configureert de code de gebruikersinterface met een TextField voor het invoeren van de naam van de held, een ComboBox om een superkracht te selecteren, en een Button om de registratie in te dienen.

De Hero-klasse definieert het gegevensmodel met validatiebeperkingen voor de naam en kracht van de held. Invoer moet geldig zijn en voldoen aan gespecificeerde criteria zoals lengte en patroon.

De app gebruikt de BindingContext om UI-componenten te binden aan de eigenschappen van het Hero-object. Wanneer een gebruiker op de verzendknop klikt, schrijft de app de gegevens die in het formulier zijn ingevoerd terug naar de Hero-bean als ze geldig zijn.

public class HeroRegistration extends App {

private TextField name = new TextField("Text Field");
private ComboBox power = new ComboBox("Power");
private Button submit = new Button("Submit Application");
private FlexLayout layout = FlexLayout.create(name, power, submit).vertical().build()
.setStyle("margin", "20px auto").setMaxWidth("400px");

@Override
public void run() throws WebforjException {
power.insert("Fly", "Invisible", "LaserVision", "Speed", "Teleportation");

BindingContext<Hero> context = BindingContext.of(this, Hero.class, true);
Hero bean = new Hero("Superman", "Fly");

// reflect the bean data in the form
context.read(bean);

submit.onClick(e -> {
// write the form data back to the bean
ValidationResult results = context.write(bean);

if (results.isValid()) {
// do something with the bean
// repository.persist(bean)
}
});

Frame frame = new Frame();
frame.add(layout);
}
}

Belangrijkste kenmerken

  • Bidirectionele Binding: Ondersteunt bidirectionele gegevensbinding, waarmee wijzigingen in het gegevensmodel de UI bijwerken, en gebruikersinteracties in de UI het gegevensmodel bijwerken.

  • Validatieondersteuning: Integreert uitgebreide valid механisten die je kunt aanpassen en uitbreiden. Ontwikkelaars kunnen hun eigen validatieregels implementeren of bestaande validatiekaders zoals Jakarta Validation gebruiken om de gegevensintegriteit te verifiëren voordat ze het model bijwerken.

  • Uitbreidbaarheid: Kan eenvoudig worden uitgebreid om verschillende soorten UI-componenten, gegevenstransformaties en complexe validatiescenario's te ondersteunen.

  • Annotatie-Aangedreven Configuratie: Maakt gebruik van annotaties om de boilerplatecode te minimaliseren, waardoor de bindingen tussen UI-componenten en gegevensmodellen declaratief en gemakkelijk te beheren zijn.

Onderwerpen