JBoss Seam – formularze
Po krótkim opisaniu akcji i konwersacji 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.



