Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

Formulárové komponenty - dokončenie

V minulom dieli tipov a trikov pre framework Apache Wicket sme začali vytvárať formulár, obsahujúci rôzne komponenty. Zatiaľ sme do formulára pridali TextField, PasswordTextField, textarea a DropDownChoice. Ešte nám zostáva pridať RadioGroup, Radio a checkbox.

Formulárové komponenty - dokončenie

RadioGroup, Radio

Teraz pridáme do formulára komponenty pre voľbu pohlavia.

.java

RadioGroup rg = new RadioGroup("gender", new PropertyModel(this, "gender"));
rg.add(new Radio<String>("man", new Model("man")));
rg.add(new Radio<String>("woman", new Model("woman")));
rg.add(new AjaxFormChoiceComponentUpdatingBehavior() {
    @Override
    protected void onUpdate(AjaxRequestTarget target) {
        service = null;
        children = null;
        target.add(container);
    }
});
form.add(rg);

.html

<div wicket:id="gender">
    <label class="bold">Pohlaví</label><br>
    <label for="man">Muž</label><input type="radio" wicket:id="man" id="man"><br>
    <label for="woman">Žena</label><input type="radio" wicket:id="woman" id="woman"><br>
</div>

V kóde vyššie to nie je uvedené, ale do html som tiež pridal dva tagy <hr> (čiara) pre vizuálne oddelenie voľby pohlavia od zvyšku volieb vo formulári.

.properties

service.null=Vyberte po\u010Det let vojensk\u00E9 slu\u017Eby
children.null=Zvolte po\u010Det d\u011Bt\u00ED

V .properties súboru nastavíme text, ktorý sa zobrazí v tagu <select> v prípade, že nie je vybraná žiadna voľba. Properties súbory boli vysvetlené napr. V tomto dieli tutoriálu.

vysvetlenie:

RadioGroup rg = new RadioGroup("gender", new PropertyModel(this, "gender"));

Užívateľ môže byť buď muž, alebo žena. Z toho dôvodu je použitá komponenta RadioGroup, ktorá jednotlivé komponenty Radio združuje dohromady. Voľby používateľa sa uloží do premennej private String gender ;

rg.add(new Radio<String>("man", new Model("man")));

Vytvorí komponent Radio a pridá ju do RadioGroup. V prípade, že používateľ vyberie tento variant, do premennej gender sa uloží hodnota "man".

rg.add(new AjaxFormChoiceComponentUpdatingBehavior() {
    @Override
    protected void onUpdate(AjaxRequestTarget target) {
        service = null;
        children = null;
        target.add(container);
    }
});

Pridá RadioGroup rg "behavior", čo je spôsob, ako komponente pridať nejakú funkcionalitu. V tomto prípade zmena voľby užívateľom spôsobí zavolanie metódy onUpdate, ktorá nastaví hodnotu service a children na null a updatuje komponent container (táto komponenta sa prekreslí). Tým sa updatuje aj všetky v nej obsiahnuté komponenty. Pre "behavior" je použitý Ajax, takže sa updatuje a prekreslí len komponenta pridaná do target. Tento komponent musí mať nastavené outputMarkupId na true.

container.setOutputMarkupId(true);
formulár s RadioGroup a Radio - Tipy a triky pre Wicket

Checkbox

Ešte nám zostáva pridať checkbox.

.java

CheckBox agreeCHB = new CheckBox("agree", new PropertyModel<Boolean>(this, "agree"));
form.add(agreeCHB);

.html

<label for="agree">Souhlasím s podmínkami</label><input type="checkbox" wicket:id="agree" id="agree"><br>

Na záver v properties určíme, aký text sa má zobraziť v prípade, že nebudú zadaná povinné polia. Viac napr. V tomto dieli tutoriálu.

.properties

form.username.Required=Email je povinn\u00FD\!
form.password.Required=Heslo je povinn\u00E9\!
form.text.Required=Text je povinn\u00FD\!
formulár s výpisom do FeedbackPanel - Tipy a triky pre Wicket

a tiež zmeníme metódu onSubmit tak, aby nám do konzoly vypisovala užívateľom vybrané dáta.

.java

@Override
protected void onSubmit() {
    System.out.println("Form submitted");
    System.out.println("Username: " + username);
    System.out.println("Password: " + password);
    System.out.println("Text: " + text);
    System.out.println("Sex: " + gender);
    System.out.println("Number of years in service: " + service);
    System.out.println("Number of children: " + children);
    System.out.println("Agree: " + agree);
}
odoslaný formulár - Tipy a triky pre Wicket

Výstup v konzole:

Form submitted
Username: vita
Password: 1234
Text: Nějaký text.
Sex: man
Number of years in service: 0
Number of children: null
Agree: true

Keď už pracujeme s formulármi, bolo by dobré spomenúť ešte metódu onError. Ide o ďalšiu metódu komponenty Form, ktorú môžeme preťažiť. Táto metóda, tak ako jej názov vypovedá, sa volá v prípade, že odoslaní formulára skončí chybou.

My túto metódu použijeme na vypísanie textu do panela feedback.

.java

Form form = new Form("form") {
    @Override
    protected void onSubmit() {…}

    @Override
    protected void onError() {
        error(getString("form.submit.error"));
    }
};

.properties

form.submit.error=Formul\u00E1\u0159 obsahuje n\u00E1sleduj\u00EDc\u00ED chyby\:

Vysvetlenie:

error(getString("form.submit.error"));

Metóda error () vypíše do panelu feedback text, ktorý je v properties súbore pod kľúčom form.submit.error (tento kľúč je voliteľný a záleží na vás, aký si vymyslíte).

Ešte ľahko upravíme štýly:

.css

.feedback li {
    list-style: none;
}
formulár - Tipy a triky pre Wicket

Jedným zo spôsobov, ako po užívateľovi požadovať zadaní vstupu, je označiť komponent ako required. Ďalšou možnosťou je, zneprístupniť (disabled) tlačidlo pre odoslanie formulára dovtedy, kým všetky požadované polia nebudú vyplnené.

V našom formulári budeme požadovať zaškrtnutie políčka "Súhlasím s podmienkami".

Tejto funkcionality dosiahneme jednoduchou úpravou.

.java

final Button submitBT = new Button("submit") {
    @Override
    protected void onConfigure() {
        setEnabled(agree != null && agree);
    }
};
submitBT.setOutputMarkupId(true);
form.add(submitBT);

Tlačidle v metóde onConfigure určíme, kedy má enabled a kedy disabled.

Ak by sme vykonali iba túto zmenu, tlačidlo by bolo disabled vždy. Je ešte nutné pridať komponente checkbox behavior, ktoré updatuje tlačidlo v prípade, že na komponente checkbox dôjde k zmene.

.java

CheckBox agreeCHB = new CheckBox("agree", new PropertyModel<Boolean>(this, "agree"));
agreeCHB.add(new OnChangeAjaxBehavior() {
    @Override
    protected void onUpdate(AjaxRequestTarget target) {
        target.add(submitBT);
    }
});
form.add(agreeCHB);
formulár s disabled tlačidlom - Tipy a triky pre Wicket
formulár s enabled tlačidlom - Tipy a triky pre Wicket

Validácia polí pre vstup používateľského mena, hesla a texu funguje bez zmeny.

formulár so zobrazením chýb - Tipy a triky pre Wicket

 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 4x (2.35 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Všetky články v sekcii
Tipy a triky pre Wicket
Článok pre vás napísal vita
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
vita
Aktivity