Odnośniki
|
[ Pobierz całość w formacie PDF ] ponieważ struktura List nie może zawierać wartości typów prostych. Lista może zawierać wymieszane elementy value i null-value. Element value-class jest opcjonalny jeśli z niego zrezygnujemy, zostanie wygenerowana lista obiektów klasy java.lang.String. 66 JavaServer Faces Z nieco bardziej skomplikowaną sytuacją mamy do czynienia w przypadku map. W odpo- wiednich konstrukcjach możemy stosować opcjonalne elementy key-class i value-class (gdzie typem domyślnym ponownie jest klasa java.lang.String). Musimy następnie zdefi- niować sekwencję elementów map-entry, z których każdy obejmuje element key oraz element value lub null-value. Poniżej przedstawiono przykładową konfigurację struktury typu Map: java.lang.Integer 1 George Washington 3 Thomas Jefferson 16 Abraham Lincoln 26 Theodore Roosevelt Za pomocą elementów list-entries i map-entries można inicjalizować struktury managed- bean lub managed-property, pod warunkiem że odpowiedni komponent lub właściwość jest egzemplarzem typu List lub Map. Na rysunku 2.7 przedstawiono diagram składni definicji elementu managed-bean i wszystkich jego elementów potomnych. Strzałki na tym diagramie dobrze ilustrują, które konstrukcje można stosować w ramach elementu managed-bean. Na przykład z drugiego z przedstawionych grafów wynika, że element managed-property rozpoczyna się od zera, jednego lub wielu elementów description, po których następuje zero, jeden lub wiele elementów display-name, zero, jeden lub wiele elementów icon, wymagany element property-name, opcjonalny ele- ment property-class oraz dokładnie jeden z elementów value, null-value, map-entries lub list-entries. Wiązanie definicji komponentów Bardziej skomplikowane konstrukcje możemy definiować, stosując w elementach value wyrażenia reprezentujące wartości, które zwiążą ze sobą więcej komponentów. Wróćmy na chwilę do komponentu quizu użytego w aplikacji numberquiz. Quiz obejmuje zbiór problemów reprezentowanych przez właściwość problems dostępną tylko do zapisu. Możemy ten komponent skonfigurować za pomocą następujących elementów: Rozdział 2. Komponenty zarządzane 67 Rysunek 2.7. Diagram składni definicji elementów komponentu zarządzanego quiz com.corejsf.QuizBean session problems com.corejsf.ProblemBean #{problem1} #{problem2} #{problem3} #{problem4} #{problem5} Oczywiście musimy teraz zdefiniować komponenty nazwane od problem1 do problem5: problem1 com.corejsf.ProblemBean 68 JavaServer Faces none sequence java.lang.Integer 3 1 4 1 5 solution 9 W odpowiedzi na żądanie kierowane do komponentu quiz nastąpi automatyczne utworze- nie komponentów od problem1 do problem5. Kolejność, w jakiej wskazujemy komponenty zarządzane, nie ma większego znaczenia. Warto zwrócić uwagę na zasięg none komponentów problemów wynikający z tego, że żądania pod ich adresem nigdy nie pochodzą ze strony JSF, a ich egzemplarze są tworzone wskutek żądań wskazujących na komponent quiz. Wiążąc ze sobą różne komponenty, musimy być pewni co do zgodności ich zasięgów. W tabeli 2.1 wymieniono wszystkie dopuszczalne kombinacje. Tabela 2.1. Zgodne zasięgi komponentów Definiując komponent o takim zasięgu... ... możemy korzystać z komponentów o takich zasięgach none none application none, application session none, application, session request none, application, session, request Konwersje łańcuchów Wartości właściwości i elementy list lub map konfigurujemy za pomocą elementu value obejmującego łańcuch. Aańcuch zawarty w tym elemencie musi zostać przekonwertowany na odpowiedni typ właściwości lub elementu. W przypadku typów prostych taka konwersja jest bardzo prosta. Możemy na przykład zdefiniować wartość typu boolean, stosując łańcuch true lub false. Począwszy od wersji JSF 1.2, możemy wykorzystywać elementy value także do definiowania wartości typów wyliczeniowych. Niezbędna konwersja jest realizowana za pomocą metody Enum.valueOf(klasa_właściwości, wartość_tekstowa). Rozdział 2. Komponenty zarządzane 69 Dla pozostałych typów właściwości implementacja JSF próbuje zlokalizować pasującą imple- mentację interfejsu PropertyEditor. Jeśli taki edytor właściwości istnieje, następuje wywołanie metody setAsText tego edytora celem konwersji łańcuchów na wartości właściwości. Edytory właściwości są bardzo często wykorzystywane przez komponenty pracujące po stronie klienta i mają na celu konwersję wartości właściwości na reprezentację tekstową lub graficzną umożli- wiającą ich wyświetlanie w oknie właściwości (patrz rysunek 2.8). Rysunek 2.8. Okienko właściwości narzędzia do projektowania graficznego interfejsu użytkownika Definiowanie edytora właściwości jest zadaniem dość złożonym, zatem zainteresowanych Czytelników zachęcamy do lektury rozdziału 8. książki pt. Core Java"! 2, vol. 2 Advanced Features (7th ed.)4 autorstwa Caya Horstmanna i Gary ego Cornella. Musimy pamiętać, że reguły konwersji są dość restrykcyjne. Jeśli na przykład dysponujemy właściwością typu URL, nie możemy po prostu zapisać adresu URL w formie łańcucha, mimo że istnieje konstruktor URL(String). Musimy albo opracować edytor właściwości dla typu URL, albo ponownie zdefiniować typ tej właściwości jako String. Reguły konwersji podsumowano w tabeli 2.2. Identyczne reguły są stosowane dla akcji [ Pobierz całość w formacie PDF ] |
|||
Sitedesign by AltusUmbrae. |