Kwiecień
17
2009

JBoss Seam – formularze

Słowa kluczowe: , | Kategorie: Seam Framework
No Gravatar

Po krótkim opisaniu akcjikonwersacji przyszła kolej na formularze.

W środowisku Eclipse wybieram z górnego menu kreator File→New→Seam Form, w polu Seam component name wpisuję SampleForm i klikam Finish. Otrzymuję pliki:

sampleForm.xhtml
strona formularza w projekcie aplikacji WWW,
SampleForm.java
plik z komponentem formularza,
SampleFormTest.java
plik z testami komponentu (w projekcie testów),
SampleFormTest.xml
plik konfiguracyjny testów.

Tak jak w przypadku akcji, testy zostawię na kiedy indziej.

Komponent

Do klasy komponentu zaimportowane zostały następujące pakiety:


import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.log.Log;
import org.jboss.seam.international.StatusMessages;
import org.hibernate.validator.Length;

Sam komponent to zwykła klasa, zawierająca jedynie adnotację z nazwą komponentu:


@Name("SampleForm")
public class SampleForm {
}

Poniżej przedstawione zostały składowe klasy SampleForm:


@Logger
private Log log;

@In
StatusMessages statusMessages;

private String value;

public void sampleForm() {
    log.info("SampleForm.sampleForm() action called with: #{SampleForm.value}");
    statusMessages.add("sampleForm #{SampleForm.value}");
}

@Length(max = 10)
public String getValue() {
    return value;
}

public void setValue(String value) {
    this.value = value;
}

Na temat pól log oraz statusMessages pisałem już przy okazji akcji, więc tym razem je pominę. Poza tym, komponent formularza posiada właściwość value opatrzoną adnotacją @Length, która służy do sprawdzania poprawności wpisanych przez użytkownika danych (normalnie formularz zawiera wiele podobnie skonstruowanych właściwości). Metoda sampleForm wykonuje wszeklie czynności związane z przetworzeniem otrzymanego formularza.

Strona

Na stronie znajduje się formularz odpowiadający klasie komponentu:


<h:form id="SampleFormForm">
    <rich:panel>
        <f:facet name="header">sampleForm</f:facet>
        <s:decorate
                id="valueField"
                template="layout/edit.xhtml">
            <ui:define name="label">Value</ui:define>
            <h:inputText
                    id="value" required="true"
                    value="#{SampleForm.value}"/>
            </s:decorate>
        <div style="clear:both"/>
    </rich:panel>
    <div class="actionButtons">
        <h:commandButton
                id="sampleForm"
                value="sampleForm"
                action="#{SampleForm.sampleForm}"/>
    </div>
</h:form>

Znacznik h:inputText służy do wprowadzenia wartości (w tym wypadku jest to wartość właściwości value#{SampleForm.value}). Przesłanie danych odbywa się poprzez wciśnięcie przycisku sampleForm pod formularzem, co spowoduje wywołanie metody sampleForm (#{SampleForm.sampleForm}).

Podsumowanie

Encje, akcje, konwersacje i formularze to podstawowe elementy, z jakich składa się aplikacja JBoss Seam. Bardziej zaawansowane zagadnienia postaram się omówić niebawem.

Napisz Komentarz

*