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 ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • brzydula.pev.pl

  • Sitedesign by AltusUmbrae.