Siirry pääsisältöön

Automatic Binding

Avaa ChatGPT:ssa

webforJ tarjoaa useita ominaisuuksia, jotka tehostavat konfigurointia ja automaattista sitoutumisprosessia kehittäjille. Tämä osa osoittaa, miten näitä ominaisuuksia voidaan käyttää tehokkaasti.

Käyttäen BindingContext.of

BindingContext.of-menetelmä sitoo automaattisesti käyttöliittymäkomponentit määritellyn bean-luokan ominaisuuksiin, yksinkertaistaen sitoutumisprosessia ja vähentäen manuaalista asetusta. Se kohdistaa sitoutettavat komponentit, jotka on ilmoitettu kenttinä lomakkeessa tai sovelluksessa, beanin ominaisuuksiin niiden nimien perusteella.

public class HeroRegistration extends App {
// Sitoutettavat komponentit
TextField name = new TextField("Tekstikenttä");
ComboBox power = new ComboBox("Voima");

// ...

@Override
public void run() throws WebforjException {
BindingContext<Hero> context = BindingContext.of(this, Hero.class, true);
// ...
}
}
public class Hero {
private String name;
private String power;

// Asetus ja haku
}

UseProperty-annotaatio

Käytä UseProperty-annotaatiota määrittääksesi bean-ominaisuuden nimen, kun käyttöliittymän kentän nimi ei vastaa bean-ominaisuuden nimeä.

public class HeroRegistration extends App {
// Sitoutettavat komponentit
@UseProperty("name")
TextField nameField = new TextField("Tekstikenttä");
ComboBox power = new ComboBox("Voima");

// ...
}

Yllä olevassa esimerkissä käyttöliittymän kentän nimi on nameField, mutta bean-ominaisuus on name. Voit merkitä käyttöliittymän kentän bean-ominaisuuden nimellä varmistaaksesi oikean sitoutumisen.

BindingExclude-annotaatio

Käytä BindingExclude-annotaatiota sulkeaksesi komponentin automaattisista sitoutumisvaatimuksista, kun haluat sitoa sen manuaalisesti tai sulkea sen kokonaan pois.

public class HeroRegistration extends App {
// Sitoutettavat komponentit
@UseProperty("name")
TextField nameField = new TextField("Tekstikenttä");

@BindingExclude
ComboBox power = new ComboBox("Voima");

// ...
}

UseValidator-annotaatio

Käytä UseValidator-annotaatiota määrittääksesi validaattorit, jotka pakottavat lisävaatimuksia sitoutumisen aikana. Validaattorit sovelletaan siinä järjestyksessä, jossa ne ilmoitat.

public class UserRegistration extends App {

@UseValidator(EmailValidator.class)
TextField email = new TextField("Sähköpostiosoite");
}

UseTransformer-annotaatio

Käytä UseTransformer-annotaatiota määrittääksesi muunnosluokka suoraan käyttöliittymäkentälle. BindingContext soveltaa automaattisesti määritettyä muunnosta.

public class UserRegistration extends App {

@UseProperty("date")
@UseTransformer(DateTransformer.class)
DateField dateField = new DateField("Päivämääräkenttä");
}

BindingReadOnly-annotaatio

Käytä BindingReadOnly-annotaatiota merkitäksesi sitoutumisen vain luku -tilaksi.

public class UserRegistration extends App {

@BindingReadOnly
TextField IDField = new TextField("Käyttäjätunnus");
}

BindingRequired-annotaatio

Käytä BindingRequired-annotaatiota merkitäksesi sitoutuminen pakolliseksi. Katso myös pakollisten sitoutumisten tunnistaminen.

public class UserRegistration extends App {

@BindingRequired
TextField emailField = new TextField("Käyttäjän sähköposti");
}

Datan automaattinen kirjoittaminen

Parantaaksesi sovellusten reagointikykyä ja dynaamisuutta voit käyttää observe-menetelmää. Tämä menetelmä varmistaa, että käyttöliittymäkomponenteissa tapahtuvat muutokset siirtyvät välittömästi datamalliin. Se on erityisen hyödyllinen, kun tarvitset jatkuvaa synkronointia datamallin ja käyttöliittymän välillä.

observe-menetelmä rekisteröi ValueChangeEvent-kuuntelijan kaikille sitoutumisille kontekstissa seuraamaan käyttäjän tekemät muutoksia ja kirjoittaa nämä muutokset välittömästi sidottuihin ominaisuuksiin, jos ne ovat voimassa. Kun kutsut tätä menetelmää ensimmäisen kerran, se heijastaa bean-ominaisuudet käyttöliittymäkomponenteissa.

Tässä esimerkki kuinka käyttää observe:

Hero bean = new Hero("Superman", "Fly");
BindingContext<Hero> context = BindingContext.of(this, Hero.class, true);
context.observe(bean);
context.onValidate(e -> {
submit.setEnabled(e.isValid());
});

submit.onClick(e -> {
ValidationResult results = context.validate();
if (results.isValid()) {
// Toimi beanin kanssa.
}
});
Päivityssuunnitelma

Tämä automaattinen sitoutuminen on suuntautunutta; päivitykset heijastuvat malliin, kun päivität käyttöliittymäkomponentteja, mutta muutokset mallissa heijastuvat käyttöliittymäkomponentteihin vain kerran, kun kutsut menetelmää ensimmäisen kerran.

Huomioitavaa

Vaikka observe lisää sovellusten interaktiivisuutta, on tärkeää käyttää sitä harkiten:

  • Suorituskykyvaikutus: Tiheät päivitykset voivat vaikuttaa suorituskykyyn, erityisesti monimutkaisilla malleilla tai hitailla taustapalveluilla.
  • Käyttäjäkokemus: Automaattiset päivitykset eivät saisi häiritä käyttäjän kykyä syöttää tietoja mukavasti.

Pakollisten sitoutumisten tunnistaminen

Kun merkitset sitoutumisen pakolliseksi, se merkitsee komponentin pakolliseksi, edellyttäen että komponentti tukee tätä tilaa RequiredAware-rajapinnan kautta. Sitoutuminen ei itse valvo tätä tilaa, vaan asettaa sen komponentille, kun se on sovellettavissa.

BindingContext<User> context = new BindingContext<>(User.class, true);
context
.bind(emailField, "email")
.required()
.add()

Käyttäessäsi Jakarta-annotaatioita sitoutuminen voi automaattisesti tunnistaa pakollisen tilan perustuen siihen, onko bean-ominaisuuksilla jokin seuraavista annotaatioista:

  1. @NotNull
  2. @NotEmpty
  3. @NotBlank
  4. @Size