Siirry pääsisältöön

Understanding Components

Avaa ChatGPT:ssä
Java API

Ennen kuin rakennat mukautettuja komponentteja webforJ:ssä, on tärkeää ymmärtää perustavanlaatuiset rakenteet, jotka vaikuttavat komponenttien toimintaan. Tämä artikkeli selittää komponenttihierarkian, komponenttien identiteetin, elinkaarikäsitteet ja kuinka huolenaiheiden rajapinnat tarjoavat komponenttien ominaisuuksia.

Ymmärrys komponenttihierarkiasta

webforJ järjestää komponentit hierarkiaan kahteen ryhmään: järjestelmän sisäisiin luokkiin, joita et koskaan saa laajentaa, ja luokkiin, jotka on erityisesti suunniteltu mukautettujen komponenttien rakentamiseen. Tämä osio selittää, miksi webforJ käyttää koostumista perinnön sijaan ja mitä jokainen hierarkian taso tarjoaa.

Miksi koostumus eikä laajentaminen?

webforJ:ssä sisäänrakennetut komponentit, kuten Button ja TextField, ovat lopullisia luokkia—et voi laajentaa niitä:

// Tämä ei toimi webforJ:ssä
public class MyButton extends Button {
// Button on lopullinen - sitä ei voi laajentaa
}

webforJ käyttää koostumista perinnön sijaan. Sen sijaan, että laajentaisit olemassa olevia komponentteja, luot luokan, joka laajentaa Composite ja yhdistää komponentit sen sisälle. Composite toimii säiliönä, joka kääriytyy yhteen komponenttiin (kutsutaan sidotuksi komponentiksi) ja antaa sinun lisätä omia komponentteja ja toimintoa siihen.

public class SearchBar extends Composite<FlexLayout> {
private final FlexLayout self = getBoundComponent();
private TextField searchField;
private Button searchButton;

public SearchBar() {
searchField = new TextField("Haku");
searchButton = new Button("Mene");

self.setDirection(FlexDirection.ROW)
.add(searchField, searchButton);
}
}

Miksi et voi laajentaa sisäänrakennettuja komponentteja

webforJ-komponentit on merkitty lopullisiksi, jotta säilytettäisiin asiakaspuolen web-komponentin eheys. webforJ-komponenttiluokkien laajentaminen antaisi hallinnan alhaalla olevalle web-komponentille, mikä voisi johtaa odottamattomiin seurauksiin ja rikkoa komponenttien käyttäytymisen johdonmukaisuuden ja ennakoitavuuden.

Yksityiskohtaisen selityksen saat osiosta Lopulliset luokat ja laajentamiskielto arkkitehtuuridokumentaatiossa.

Komponenttihierarkia

Kehittäjille tarkoitetut luokat (käytä näitä):

  • Composite
  • ElementComposite
  • ElementCompositeContainer

Sisäiset järjestelmäluokat (älä laajenna suoraan):

  • Component
  • DwcComponent
Älä koskaan laajenna Component tai DwcComponent

Älä koskaan laajenna Component tai DwcComponent suoraan. Kaikki sisäänrakennetut komponentit ovat lopullisia. Käytä aina koostumismalleja Composite tai ElementComposite kanssa.

Yritys laajentaa DwcComponent heittää ajonaikaisen poikkeuksen.

Huolenaiheiden rajapinnat

Huolenaiheiden rajapinnat ovat Java-rajapintoja, jotka tarjoavat erityisiä ominaisuuksia komponentillesi. Jokainen rajapinta lisää joukon liittyviä metodeja. Esimerkiksi HasSize lisää metodeja leveyden ja korkeuden hallintaan, kun taas HasFocus lisää metodeja fokus-tilan hallintaan.

Kun toteutat huolenaiheiden rajapinnan komponentissasi, saat käyttöön nämä ominaisuudet ilman, että sinun tarvitsee kirjoittaa toteutuskoodeja. Rajapinta tarjoaa oletustoteutuksia, jotka toimivat automaattisesti.

Huolenaiheiden rajapintojen toteuttaminen antaa mukautetuille komponenteillesi samat API:t kuin sisäänrakennetuissa webforJ-komponenteissa:

// Toteuta HasSize saadaksesi leveys/korkeusmetodit automaattisesti
public class SizedCard extends Composite<Div> implements HasSize<SizedCard> {
private final Div self = getBoundComponent();

public SizedCard() {
self.setText("Kortin sisältö");
}

// Ei tarvitse toteuttaa näitä - saat ne ilmaiseksi:
// setWidth(), setHeight(), setSize()
}

// Käytä sitä kuten mitä tahansa webforJ-komponenttia
SizedCard card = new SizedCard();
card.setWidth("300px")
.setHeight("200px");

Koostumus välittää automaattisesti nämä kutsut taustalla olevalle Div:lle. Ei lisäkoodia tarvita.

Ulkoasu

Nämä rajapinnat hallitsevat komponentin visuaalista esitystä, mukaan lukien sen mitat, näkyvyys, tyylit ja teema.

RajapintaKuvaus
HasSizeHallitsee leveyttä ja korkeutta, mukaan lukien minimi- ja maksimi-rakenteet. Laajentaa HasWidth, HasHeight ja niiden min/max-variantteja.
HasVisibilityNäyttää tai piilottaa komponentin poistamatta sitä asettelusta.
HasClassNameHallitsee CSS-luokkien nimiä komponentin juurielementissä.
HasStyleSoveltaa ja poistaa sisäisiä CSS-tyylejä.
HasHorizontalAlignmentHallitsee kuinka sisältö on kohdistettu vaakasuoraan komponentissa.
HasExpanseAsettaa komponentin koon variantin käyttämällä vakiomittaluokkia (XSMALL - XLARGE).
HasThemeSoveltaa teeman varianttia, kuten DEFAULT, PRIMARY tai DANGER.
HasPrefixAndSuffixLisää komponentteja etuliitteeseen tai jälkiliitteeseen komponentin sisällä.

Sisältö

Nämä rajapinnat hallitsevat, mitä komponentti näyttää, mukaan lukien teksti, HTML, etiketit, vihjeet ja muut kuvaavat sisällöt.

RajapintaKuvaus
HasTextAsettaa ja hakee komponentin pelkän tekstisisällön.
HasHtmlAsettaa ja hakee komponentin sisäisen HTML:n.
HasLabelLisää kuvailevan etiketin komponentille, jota käytetään esteettömyyden vuoksi.
HasHelperTextNäyttää toissijaisen vihjetekstin komponentin alapuolella.
HasPlaceholderAsettaa paikkamerkki-tekstin, joka näytetään, kun komponentilla ei ole arvoa.
HasTooltipLiittää työkaluvihjeen, joka näkyy hiiren yllä.

Tila

Nämä rajapinnat hallitsevat komponentin interaktiivista tilaa, mukaan lukien onko se käytössä, muokattavissa, pakollinen tai saako se fokuksen latauksen yhteydessä.

RajapintaKuvaus
HasEnablementOttaa käyttöön tai poistaa käytöstä komponentin.
HasReadOnlyAsettaa komponentin vain lukemiseen, jolloin arvo on näkyvissä mutta sitä ei voi muuttaa.
HasRequiredMerkitsee komponentin pakolliseksi, tyypillisesti lomakevalidointia varten.
HasAutoFocusSiirtää fokuksen komponenttiin automaattisesti, kun sivu latautuu.

Fokus

Nämä rajapinnat hallitsevat, miten komponentti saa ja reagoi näppäimistöfokukseen.

RajapintaKuvaus
HasFocusHallitsee fokus-tilaa ja voiko komponentti saada fokuksen.
HasFocusStatusTarkistaa, onko komponentilla tällä hetkellä fokus. Vaatii pyynnön palvelimelle.
HasHighlightOnFocusHallitsee, korostetaanko komponentin sisältöä, kun se saa fokuksen ja miten (KEY, MOUSE, KEY_MOUSE, ALL jne.).

Syöttörajoitukset

Nämä rajapinnat määrittelevät, mitä arvoja komponentti hyväksyy, mukaan lukien nykyinen arvo, sallittavat alueet, pituusrajoitukset, muotoilumaskit ja kielikohtaiset toimintatavat.

RajapintaKuvaus
HasValueHakee ja asettaa komponentin nykyisen arvon.
HasMinAsettaa sallitun vähimmäisarvon.
HasMaxAsettaa sallitun enimmäisarvon.
HasStepAsettaa askelvälin numeerisille tai alueen syötteille.
HasPatternSoveltaa säännöllistä lauseketta rajoittaakseen hyväksyttyä syötettä.
HasMinLengthAsettaa komponentin arvon vaatimaksi vähimmäismerkkimääräksi.
HasMaxLengthAsettaa komponentin arvossa sallitun enimmäismerkkimäärän.
HasMaskSoveltaa syötteelle muotoilumaskeja. Käytetään maskeeratuissa kenttäkomponenteissa.
HasTypingModeHallitsee, tuleeko kirjoitetut merkit lisätä vai korvata olemassa olevat merkit (INSERT tai OVERWRITE). Käytetään maskeeratuissa kentissä ja TextArea:ssa.
HasRestoreValueMäärittelee arvon, johon komponentti palautuu, kun käyttäjä painaa Escape tai kutsuu restoreValue(). Käytetään maskeeratuissa kentissä.
HasLocaleTallentaa komponentin yksilöllisen kielen, jota käytetään kielikohtaisessa muotoilussa. Käytetään maskeeratuissa päivämäärä- ja aikakentissä.
HasPredictedTextAsettaa ennakoidun tai automaattisesti ehdotetun tekstin arvon. Käytetään TextArea:ssa, jotta tuetaan sisäisiä ehdotuksia.

Validointi

Nämä rajapinnat lisäävät asiakaspuolen validointikäyttäytymistä, mukaan lukien komponenttien merkitseminen virheelliseksi, virheilmoitusten näyttäminen ja sen hallinta, milloin validointi suoritetaan.

RajapintaKuvaus
HasClientValidationMerkitsee komponentin virheelliseksi, asettaa virheilmoituksen ja liittää asiakaspuolen validoijan.
HasClientAutoValidationHallitsee, validoiko komponentti automaattisesti, kun käyttäjä kirjoittaa.
HasClientAutoValidationOnLoadHallitsee, validoiko komponentti, kun se ensiksi latautuu.
HasClientValidationStyleHallitsee, miten validointiviestit näytetään: INLINE (komponentin alapuolella) tai POPOVER.

DOM-pääsy

Nämä rajapinnat tarjoavat matalan tason pääsyn komponentin taustalla olevaan HTML-elementtiin ja asiakaspuolen ominaisuuksiin.

RajapintaKuvaus
HasAttributeLukee ja kirjoittaa satunnaisia HTML-attribuutteja komponentin elementissä.
HasPropertyLukee ja kirjoittaa DWC-komponentin ominaisuuksia suoraan asiakaspuolen elementissä.

i18n

Tämä rajapinta tarjoaa käännöksille tukea, jos komponenttien tulee näyttää paikallistettua tekstiä.

RajapintaKuvaus
HasTranslationTarjoaa t() apumenetelmän käännösohjeiden ratkaisemiseen paikallistettuihin merkkijonoihin sovelluksen nykyisen kielen avulla.
varoitus

Jos taustalla oleva komponentti ei tue rajapinnan ominaisuutta, saat ajonaikaisen poikkeuksen. Tarjoa omat toteutuksesi tällöin.

Saat täydellisen luettelon saatavilla olevista huolenaiheiden rajapinnoista webforJ JavaDoc -osoitteesta.

Komponentin elinkaaren yleiskatsaus

webforJ hallitsee komponentin elinkaarta automaattisesti. Kehys hoitaa komponentin luomisen, liittämisen ja tuhoamisen ilman manuaalista väliintuloa.

Elinkaarikoukkuja on saatavilla, kun tarvitset niitä:

  • onDidCreate(T container) - Kutsutaan, kun komponentti on liitetty DOM:iin
  • onDidDestroy() - Kutsutaan, kun komponentti tuhotaan

Nämä koukut ovat valinnaisia. Käytä niitä, kun tarvitset:

  • Vapauttaaksesi resursseja (lopettaa aikavälejä, sulkea yhteyksiä)
  • Alustaa komponentteja, jotka vaativat DOM:in liittämistä
  • Integroituaksesi asiakaspuolen JavaScriptin kanssa

Useimmissa yksinkertaisissa tapauksissa voit alustaa komponentteja suoraan konstruktorissa. Käytä elinkaarikoukkuja, kuten onDidCreate(), työn lykkäämiseen tarpeen vaatiessa.