Sorting
Lajittelu antaa käyttäjille mahdollisuuden järjestää tietoja sarakkeissa järjestyksen mukaan, mikä tekee tiedoista helpommin luettavia ja analysoitavia. Tämä on hyödyllistä, kun käyttäjät tarvitsevat nopeasti löytää korkeimmat tai matalimmat arvot tietyssä sarakkeessa.
Tietoa siitä, kuinka käyttää Repository-mallia hallitaksesi ja kysyäksesi kokoelmia, katso Repository-artikkelit.
Näytä koodi
- TableSortingView.java
- MusicRecord.java
- Service.java
Oletuksena sarake ei ole lajittelukelpoinen, ellei se ole erikseen sallittu. Salliaksesi lajittelun tietyssä sarakkeessa, käytä setSortable(true) -menetelmää:
table.getColumn("Ikä").setSortable(true);
Monilajittelu
25.00Ennen webforj 25.00:aa taulukot tukivat oletuksena monisarakkeista lajittelua. Versiosta 25.00 alkaen tämä käyttäytyminen muuttui—kehittäjien täytyy nyt erikseen sallia monisarakkeinen lajittelu.
Jos monilajittelu on tarpeen, setMultiSorting(true) on sovellettava taulukkoon. Tämä sallii käyttäjien lajitella useita sarakkeita peräkkäin:
table.setMultiSorting(true);
Monilajittelun ollessa käytössä, useiden sarakeotsikoiden klikkaaminen lajittelee ne peräkkäin. Lajittelun prioriteetti näkyy visuaalisesti taulukkokäyttöliittymässä.
Näytä koodi
- TableMultiSortingView.java
- MusicRecord.java
- Service.java
Voit myös määrittää lajittelun prioriteetin ohjelmallisesti palvelinpuolen lajittelu varten. Käytä setSortOrder() sarakkeilla, joita haluat lajitella, prioriteettiluettelon mukaisesti:
// Palvelinpuolen lajittelujärjestys
nameColumn.setSortOrder(1);
ageColumn.setSortOrder(2);
Ellei setSortOrder() -menetelmää käytetä, taulukko käyttää oletuksena lajittelua sarakkeiden julkaisujärjestyksen mukaan.
Näytä koodi
- TableMultiSortingView.java
- MusicRecord.java
- Service.java
Lajittelusuunta
Sarake voidaan lajitella kolmessa eri suunnassa:
SortDirection.ASC: Lajittelee sarakkeen nousevassa järjestyksessä.SortDirection.DESC: Lajittelee sarakkeen laskevassa järjestyksessä.SortDirection.NONE: Sarakkeeseen ei ole sovellettu lajittelua.
Kun sarakkeessa on lajittelu käytössä, näet sarakeotsikon yläpuolella joukon pystysuoria nuoli-indikaattoreita. Nämä nuolet mahdollistavat käyttäjän vaihtaa eri lajittelusuuntien välillä.
Kun nouseva järjestys on valittuna, näkyy ^, kun taas laskevassa järjestyksessä näkyy v.
Asiakas vs. palvelinpuolen lajittelu
Tietojen lajittelu voidaan laajasti jakaa kahteen päämenetelmään: Asiakaslajittelu ja Palvelinlajittelu.
Asiakaslajittelu
Asiakaslajittelu tarkoittaa, että tiedot järjestetään ja näytetään suoraan asiakasohjelman käyttöliittymässä. Se on lajittelu, johon käyttäjät vuorovaikuttavat, kun he klikata sarakeotsikoita, vaikuttaen tiedon visuaaliseen esitykseen näytöllä.
Kehittäjällä ei ole suoraa vaikutusvaltaa asiakaspuolen lajitteluun, vaan se määräytyy Java:ssa annettujen sarakkeiden tyyppien mukaan. Seuraavia tyyppejä tuetaan tällä hetkellä:
- TEKSTI
- NUMERO
- BOOL
- PÄIVÄMÄÄRÄ
- PÄIVÄMÄÄRÄ-AIKA
- AIKA
Asiakaslajittelu ei toimi, kun vain osa tiedoista on saatavilla asiakkaalla.
Palvelinlajittelu
Toisin kuin asiakaspuolen lajittelu, palvelinlajittelu tarkoittaa tietojen järjestämistä ja järjestämistä palvelimella ennen kuin ne siirretään asiakkaalle. Tämä lähestymistapa on erityisen hyödyllinen, kun käsitellään suuria tietokokonaisuuksia, joita olisi mahdotonta siirtää kokonaan asiakkaalle.
Kehittäjillä on enemmän hallintaa palvelinlajittelun logiikasta. Tämä mahdollistaa monimutkaisten lajittelualgoritmien ja optimointien toteuttamisen, minkä vuoksi se on sopiva laajoja tietokokoelmia käsitellessä. Tämä varmistaa, että asiakas saa ennakko-lajitellut tiedot, mikä vähentää tarvetta laajalle asiakaspuolen käsittelylle.
Palvelinlajittelu on suorituskykyyn keskittyvä strategia käsiteltäessä tietokokonaisuuksia, jotka ylittävät tehokkaan asiakaspuolen käsittelyn kyvyt, ja on oletusmenetelmä Table:ssa.
Sarakeominaisuuden nimi
Oletuksena Table käyttää sarakkeen ID:tä ominaisuusnimenä, kun se rakentaa lajittelukriteereitä taustajärjestelmän tallennuspaikalle. Kun sarakkeen näyttö-ID ei vastaa taustalla olevaa tietovarantoa, tai kun sarake näyttää laskentatavan arvon, käytä setPropertyName() kertoaksesi nimenomaisesti Table:lle, minkä ominaisuuden mukaan lajittelua haluat.
// Sarakkeen ID on "Koko Nimi", mutta taustatieto on "fullName"
table.addColumn("Koko Nimi", Person::getFullName)
.setSortable(true)
.setPropertyName("fullName");
Ominaisuuden nimi välitetään OrderCriteria:lle, kun lajittelutapahtuma laukaistaan, jolloin taustajärjestelmien kuten Spring Data JPA tai REST-adapterit voivat rakentaa oikean ORDER BY -lauseen.
Ilman setPropertyName() -menetelmää Table palauttaa takaisin sarakkeen ID:lle. Jos tämä ei vastaa voimassa olevaa taustadatan ominaisuutta, lajittelu epäonnistuu hiljaa tai palauttaa väärin järjestettyjä tietoja.
Myös sisäkkäiset ominaisuudet saavat tukea piste-notaatiossa:
table.addColumn("Kaupunki", Person::getCity)
.setSortable(true)
.setPropertyName("address.city");
Vertailijat
Column-komponentti mahdollistaa kehittäjien käyttää Java Comparators-työkaluja dynaamiseen ja mukautettuun lajitteluun. Comparator on mekanismi, joka käytetään kahden saman luokan objektin järjestämiseen, vaikka luokka olisi käyttäjän määrittämä. Tämä toiminnallisuus tarjoaa kehittäjille joustavuutta räätälöidä, miten dataa lajitellaan, tarjoten suuremman hallinnan oletuslajittelukäyttäytymiseen verrattuna luonnolliseen järjestykseen.
Voit hyödyntää Comparator-lajittelua sarakkeessa käyttämällä setComparator() -menetelmää. Tämä menetelmä sallii sinun määrittää mukautetun Comparator-toiminnon, joka määrää lajittelulogiikan.
Näytä koodi
- TableColumnComparatorView.java
- MusicRecord.java
- Service.java
Edellä olevassa esimerkissä määritellään mukautettu vertailutoiminto, joka ottaa kaksi elementtiä (a ja b), ja määrittelee lajittelujärjestyksen Number-attribuutin parsettujen kokonaisarvojen perusteella.
Vertailijoiden käyttö sarakelajittelussa on erityisen hyödyllistä, kun käsitellään ei-numeerisia arvoja. Ne ovat myös hyödyllisiä monimutkaisten lajittelualgoritmien toteuttamisessa.
Oletuksena Table käyttää palvelinpuolen lajittelua, ja lajittelee ei-primitiviarvoja käyttämällä Objectin toString()-menetelmää, muuntamalla ne merkkijonoarvoiksi ja sitten lajitellen niitä.