Professional Documents
Culture Documents
Galileo. Tworzenie
• Spis treści
• Przykładowy rozdział aplikacji WWW
Autor: Andrzej Marciniak
Katalog książek ISBN: 978-83-246-2656-4
Format: 158×235, stron: 384
• Katalog online
• Zamów drukowany
katalog
• Jak projektować estetyczne i wygodne interfejsy użytkownika aplikacji WWW?
Twój koszyk • Od czego zacząć projekt wykorzystujący JavaServer Faces?
• Co oferuje środowisko Eclipse Galileo, a co narzędzia Web Tools Platform?
Dobry interfejs aplikacji WWW to połowa jej sukcesu. Osiągnij go z JavaServer Faces! Język Java
• Dodaj do koszyka od lat zdobywa i ugruntowuje swoją popularność wśród programistów i twórców aplikacji WWW,
a rozmaite platformy i rozwiązania, w których jest on wykorzystywany, zostały na stałe włączone
Cennik i informacje do pakietu narzędzi stosowanych przez wielu z nich na co dzień. Jednym z najbardziej popularnych
tego typu narzędzi jest JavaServer Faces. Można dzięki niemu w prosty sposób tworzyć interfejsy
użytkownika aplikacji, wykorzystujące platformę Java EE. Ten spójny i kompletny szkielet
• Zamów informacje programistyczny jest obecnie najbardziej elastycznym, najlepiej dopracowanym i najprostszym
o nowościach w użyciu rozwiązaniem, opartym na technologii serwletów.
• Zamów cennik Jednak „najprostszy” wcale nie musi oznaczać „prosty”, o czym z pewnością miało okazję
przekonać się wielu studentów kierunków informatycznych i profesjonalnych programistów,
Czytelnia którzy postanowili praktycznie zapoznać się z możliwościami tej technologii. Nieocenioną
pomocą okaże się dla nich książka „JavaServer Faces i Eclipse Galileo. Tworzenie aplikacji WWW”,
dzięki której można uniknąć wielu typowych błędów i nauczyć się biegle korzystać z JSF,
• Fragmenty książek zdobywając przy tym kompletną wiedzę na temat mechanizmów i rozwiązań zapewniających
online działanie tej platformy. Co więcej, opisano tu nie tylko samą technologię, lecz również sposób jej
praktycznego wykorzystania w konkretnych projektach, co w przyszłości zaowocuje z pewnością
opracowaniem niejednej doskonałej i cieszącej oko aplikacji WWW.
• Mechanizmy działania aplikacji WWW i sposoby ich projektowania w oparciu o język Java
• Podstawowe informacje na temat szkieletu programistycznego JSF
• Realizacja praktycznego projektu z wykorzystaniem JavaServer Faces
• Rozszerzanie standardowej implementacji JSF i tworzenie niestandardowych interfejsów
użytkownika
• Opis środowiska programistycznego Eclipse Galileo oraz pakietu narzędzi Web Tools
Platform
Naucz się szybko i sprawnie tworzyć rozbudowane interfejsy użytkownika aplikacji
Kontakt WWW za pomocą szkieletu programistycznego JavaServer Faces
Helion SA
ul. Kościuszki 1c
44-100 Gliwice
tel. 32 230 98 63
e-mail: helion@helion.pl
© Helion 1991–2010
Spis treci
Wstp .............................................................................................. 7
Geneza ksiki .................................................................................................................. 7
Cele .................................................................................................................................. 9
Czytelnicy ....................................................................................................................... 10
Ukad zagadnie ............................................................................................................. 10
Materiay pomocnicze .................................................................................................... 11
Podzikowania ................................................................................................................ 12
Rozdzia 1. Przed przystpieniem do pracy z JSF ............................................... 13
1.1. Dlaczego JSF? ......................................................................................................... 13
1.1.1. Wersje JSF ................................................................................................... 15
1.2. JSF i Java EE (J2EE) ............................................................................................... 17
1.2.1. Serwlety i strony JSP ................................................................................... 19
1.2.2. Technologie prezentacji ............................................................................... 23
1.2.3. MVC w aplikacjach webowych ................................................................... 27
1.2.4. Implementacja MVC w JSF ......................................................................... 32
1.2.5. Kluczowe elementy JSF — podsumowanie ................................................. 38
1.3. Pierwsza aplikacja JSF w rodowisku Eclipse ......................................................... 38
1.3.1. Instalacja kontenera serwletów .................................................................... 40
1.3.2. Instalacja rodowiska Eclipse Galileo .......................................................... 40
1.3.3. Integracja kontenera serwletów ze rodowiskiem Eclipse ........................... 43
1.3.4. Tworzenie projektu JSF ............................................................................... 44
1.3.5. Praca z JSF w oknie roboczym .................................................................... 48
1.3.6. Definiowanie modelu ................................................................................... 53
1.3.7. Definiowanie komponentu wspierajcego ................................................... 54
1.3.8. Utworzenie strony do wprowadzania danych ............................................... 56
1.3.9. Utworzenie strony do wywietlania wyniku ................................................ 59
1.3.10. Deklarowanie regu nawigacji .................................................................... 62
1.3.11. Uruchamianie aplikacji .............................................................................. 63
1.3.12. Podsumowanie przykadu .......................................................................... 65
Rozdzia 2. Planowanie, modelowanie i projektowanie aplikacji JSF
na platformie Java EE ..................................................................... 67
2.1. Modelowanie interfejsu uytkownika przy wykorzystaniu techniki scenopisu ....... 68
2.1.1. Przypadki uycia .......................................................................................... 69
2.1.2. Model ekranów interfejsu uytkownika ....................................................... 70
2.1.3. Model nawigacji .......................................................................................... 72
2.1.4. Prototypy ekranów ....................................................................................... 73
2.1.5. Diagram maszyny stanowej ......................................................................... 75
4 JavaServer Faces i Eclipse Galileo. Tworzenie aplikacji WWW
Nie jest intencj autora zamieszczenie w tym miejscu penej dokumentacji systemu ISRP
jako zoonego studium przypadku uycia JSF (ang. case study), ale raczej przedsta-
wienie pewnych praktyk projektowych zwizanych z architektur i projektowaniem
aplikacji JSF na platformie Java EE. Prezentowane rozwizania s wypadkow do-
wiadcze wielu osób w zakresie wykorzystania szkieletu JSF do wytwarzania war-
stwy prezentacji w aplikacjach o architekturze wielowarstwowej. Szczególna uwaga
powicona jest wybranym aspektom zwizanym z czynnociami fazy przedimple-
mentacyjnej projektu, takim jak modelowanie interfejsu uytkownika oraz projekto-
wanie aplikacji oparte na architekturze wielowarstwowej. Zamieszczone w tym rozdziale
model i zaoenia projektowe bd rozwijane w dalszej czci ksiki i stanowi jed-
noczenie odniesienie dla kolejnych przykadów ilustrujcych elementy technologii JSF.
68 JavaServer Faces i Eclipse Galileo. Tworzenie aplikacji WWW
Wywietl szczegóy
Zaloguj Odzyskaj haso Edytuj dane osobowe
recenzji
Autor
(from Actors)
Poka szczegóy
pracy
Dodaj prac
Uytkownik
uwierzytelniony
Wywietl list prac
(from Actors) Zarejestruj
«extend»
Edytuj prac
«include»
Recenzent
(from Actors)
Dodaj recenzj
Zarzdzaj pracami
Wywietl list
recenzji
Przypisz recenzenta
do pracy
Dodaj recenzenta
Administrator
Zarzdzaj Wywietl list
(from Actors) uytkownikami «include» uytkowników
1
Polskie wydanie: Alistair Cockburn, Jak pisa efektywne przypadki uycia, tum. Krzysztof Stencel,
Warszawa 2004.
Rozdzia 2. i Planowanie, modelowanie i projektowanie aplikacji JSF na platformie Java 71
oba zespoy. Model ekranów UI definiuje zbiór ekranów (wraz z ich zawartoci) nie-
zbdnych do zrealizowania wymaga funkcjonalnych okrelonych przez przypadki
uycia. W przypadku zawartoci ekranów model definiuje wycznie elementy funk-
cjonalne, jakie powinny znale si na nich, bez okrelania szczegóów dotyczcych
typów kontrolek (np. pola tekstowego albo listy rozwijanej) czy ich rozmieszczenia.
Statyczne informacje takie jak etykiety, obrazki czy panele nie s w ogóle reprezen-
towane w modelu UI. Dane biznesowe s przedstawiane na ekranie przy uyciu atry-
butów. Jeli atrybut opatrzony jest stereotypem <<input>>, oznacza to, e suy on do
wprowadzania danych. Peny opis atrybutu prezentowany jest wedug nastpujcego
formatu: widoczno nazwa :typ liczebno =domylna_warto {waciwoci}. Zaó-
my, e mamy ekran sucy do tworzenia konta nowego uytkownika, dostpny wy-
cznie dla administratora systemu. Pole suce do wprowadzania uprawnie dla no-
wego uytkownika moe zosta opisane w nastpujcy sposób:
<<input>> +role :String 1 =reviewer {user.role==admin}
Powyszy zapis informuje nas, e atrybut role reprezentuje pole wejciowe dla da-
nych typu String, wypeniane przez uytkowników z uprawnieniami administratora.
Widoczno elementu okrela, czy jego zawarto jest wywietlana na ekranie (+),
czy te jest ukryta (-). Nazwa atrybutu powinna identyfikowa pole wprowadzania danych
(np. warto atrybutu name dla odpowiedniego pola formularza). Typem atrybutu mo-
e by dowolny typ prymitywny lub obiektowy, wcznie z abstrakcyjnymi typami
danych, reprezentujcymi zoone struktury danych (takie jak listy czy mapy, które
mog by reprezentowane przez klasy abstrakcyjne List bd Map). Pozostae waci-
woci atrybutu s opcjonalne i nie musz by definiowane. Liczebno okrela, ile in-
stancji elementu moe by renderowanych na ekranie, warto domylna jest wartoci
uywan dla elementów, które nie s inicjowane, a nawiasy klamrowe umoliwiaj
zamieszczenie dodatkowych waciwoci bd ogranicze dotyczcych atrybutu, np.
w zakresie dostpu do pola danych.
i generowania akcji, której wynik moe wpywa na nawigacj aplikacji. Peny opis ope-
racji prezentowany jest wedug nastpujcego formatu: widoczno nazwa (lista_
parametrów) :zwracany_typ {waciwoci}. Na przykad element wyzwalajcy akcj
polegajc na przejciu do okna edycji biecego uytkownika moe by opisany w na-
stpujcy sposób:
<<submit>> + edit ():String {current.user==notEmpty}
«screen» «compartment»
addEditUser includes::leftMenu
+ globalMessage: String [0..*]
«submit»
+ addPaper {user.role==author}() : String
+ addUser {user.role==admin}() : String
+ allPapersList {user.role==admin}() : String
+ authorsPapersList {user.role==author}() : String
+ editAccount{currentUser==notEmpty}(): String
+ reviewersPapersList {user.role==reviewer}() : String
+ usersList {user.role==admin}() : String
«form»
addEditUserForm
«input» «compartment»
+ city: text includes::topMenu
+ country: select
+ department: text + userName {user==authorized}: String
+ firstName: text
+ gender: radio + english() : void
+ lastName: text + polish() : void
+ password: text «submit»
+ phone: text + login {user==notAuthorized}() : String
+ role {user.role==admin}: select + logout {user==authorized}() : String
+ street: text + registration {user==notAuthorized}() : String
+ title: text
+ zipCode: text
«submit»
+ save {currentUser==notEmpty}() : String
+ registration {currentUser==empty}() : String
«screen» «screen»
«screen»
forgotPassword login
assignReviewer
{user.role==admin} + globalMessage: String [0..*] + globalMessage: String [0..*]
forgot_password
+ paper.title: String «input»
+ email: text «submit»
«input»
+ forgotPassword() : String
+ reviewers: select
«submit» + notRegistered() : String
+ getNewPassword() : String
«submit»
+ assign() : String login registration
login_success
get_password_success
«compartment»
logout_success :topMenu
assign_reviewer
assign_success registration
aprove/reject
«screen»
index
«compartment» add_user
«screen» :leftMenu
addReview
{user.role==reviewer} edit_user
edit_success
«screen» add_success
addNewVersion «screen»
{user.role==author} addEditPaper
{user.role==author}
«input»
+ paper.file: file
«submit»
+ addNewVersion() : String
wyjcie po
«ControllerState» klikniciu przycisku
Rejestracja nieaktywna nawigacji
Final
+ entry / dezaktywuj przycisk Zarejestruj
start
«ControllerState»
Rejestracja aktywna
Rysunek 2.6.
Warstwowy model Warstwa prezentacji
architektury
wykorzystany
w aplikacji ISRP
Warstwa biznesowa
java.io.Serializable java.io.Serializable
Uytkownik wykonuje Recenzja
mieszka nadsya
java.io.Serializable java.io.Serializable
java.io.Serializable java.io.Serializable
Pytanie Odpowied
Kraj Artyku
this.countryId = countryId;
this.title = title;
this.firstName = firstName;
this.lastName = lastName;
this.organization = organization;
this.department = department;
this.street = street;
this.zipCode = zipCode;
this.city = city;
this.email = email;
this.password = password;
this.phone = phone;
this.gender = gender;
this.entryDate = entryDate;
this.role = role;
}
Obiekty usug mog zapewnia fasady dla modelu dziedzinowego (strona 83 „Wzo-
rzec fasady”) oraz implementowa procesy biznesowe.
82 JavaServer Faces i Eclipse Galileo. Tworzenie aplikacji WWW
Wzorzec fasady
Wzorzec fasady jest jednym z podstawowych i jednoczenie najprostszych struktural-
nych wzorców projektowych. Zapewnia on dostp do zoonych systemów, prezentujc
uproszczony lub uporzdkowany interfejs programistyczny. Wzorzec fasady pozwala:
ukry zoono tworzonego systemu poprzez dostarczenie prostego interfejsu API,
uproci interfejs istniejcego systemu poprzez stworzenie nakadki, która
dostarcza nowy interfejs API.
Obiekt fasady jest prostym obiektem poredniczcym pomidzy obiektem klasy klienta
dajcym okrelonej funkcjonalnoci a klasami dostarczajcymi elementów do uzy-
skania tej funkcjonalnoci.
Na przykad w systemie ISRP istniej zdefiniowane odrbne fasady dla usug zwizanych
z przetwarzaniem artykuów, uytkowników, recenzentów, formularzy z pytaniami
oraz danych sownikowych. Przedstawiony na listingu 2.4 interfejs ServiceLocator
zawiera deklaracje metod, które udostpniaj obiekty implementujce interfejsy tych
fasad. Operowanie na interfejsach pozwala na uniezalenienie si od jednej konkretnej
implementacji zestawu fasad, dziki czemu atwo moemy dostarczy implementacje
zoptymalizowane pod ktem wydajnoci czy bezpieczestwa.
84 JavaServer Faces i Eclipse Galileo. Tworzenie aplikacji WWW
public ServiceLocatorImpl() {
this.paperService = new PaperServiceImpl();
this.userService = new UserServiceImpl();
this.reviewService = new ReviewServiceImpl();
this.countryService = new CountryServiceImpl();
this.questionService = new QuestionServiceImpl();
this.log.info("Service locator bean is initialized");
}
public PaperService getPaperService() {return paperService;}
public UserService getUserService() {return userService;}
public ReviewService getReviewService() {return reviewService;}
public CountryService getCountryService() {return countryService;}
public QuestionService getQuestionService() {return questionService;}
}
Rozdzia 2. i Planowanie, modelowanie i projektowanie aplikacji JSF na platformie Java 85
Hibernate Tools
Wsparcie korzystania z biblioteki Hibernate w rodowisku Eclipse zapewnia wtyczka
programistyczna Hibernate Tools, udostpniana za darmo przez Red Hat Inc. Hibernate
Tools dostarcza zestaw widoków i kreatorów zawierajcy m.in.:
kreator dla realizacji procesu inynierii wstecznej (ang. reverse engineering),
umoliwiajcy wygenerowanie modelu obiektowego na podstawie tabel i kolumn
istniejcej bazy danych,
kreator konfiguracji hibernate.cfg.xml,
w peni funkcjonalny edytor dla jzyka Hibernate HQL,
okno komend jzyka SQL,
podpowiadanie skadni SQL,
w peni funkcjonalny edytor plików odwzorowa .hbm.xml.
Wtyczk Hibernate Tools moemy zainstalowa wedug opisu w ramce „Wtyczki pro-
gramistyczne w Eclipse”. Wówczas w polu Work with menedera instalacji wpisuje-
my nastpujcy adres:
http://download.jboss.org/jbosstools/updates/stable.
Poniewa pewne operacje (zapis, odczyt czy wyszukiwanie) powtarzaj si we wszystkich
DAO, celem uniknicia powielania kodu moemy zdefiniowa wspólny interfejs oraz
klas abstrakcyjn zawierajc definicj powtarzajcych si dla rónych typów operacji.
Generyczny interfejs zosta zaprezentowany na listingu 2.8, a implementujca jego
metody klasa abstrakcyjna GenericDao na listingu 2.9.
public UserDao() {
super(User.class);//
}
public String getAdministratorEmail(){
User user = null;
Query query = session.createQuery("FROM User where role=?")
.setByte(0, new Byte("1"));
user = (User) query.uniqueResult();
return user.getEmail();
}
public List getReviewers(){
return session.createCriteria(persistedClass)
.add(Restrictions.eq("role", new Byte("3")))
.list();
}
public User authenticate(String email, String password) {
password = Md5HashCode.getMd5HashCode(password);
return (User) session.createCriteria(persistedClass)
.add(Restrictions.eq("email", email))
.add(Restrictions.eq("password", password))
.uniqueResult();
}
public User checkIfEmailExistInDB(String email) {
Query query = session.createQuery("FROM User where email=?")
.setString(0, email);
return (User) query.uniqueResult();
}
public List<User> getUsers(String sortColumn){
if (sortColumn==null){
sortColumn="firstName";
}
return (List<User>) session.createCriteria(persistedClass)
.addOrder(Order.asc(sortColumn))
.list();
}
}
Rozdzia 2. i Planowanie, modelowanie i projektowanie aplikacji JSF na platformie Java 91
Przykadowa fabryka abstrakcyjna dla obiektów DAO uyta w aplikacji ISRP zapre-
zentowana zostaa na listingu 2.11, a jej implementacja na listingu 2.12. Przykady
wykorzystania fabryki obiektów do tworzenia DAO w warstwie usugowej zaprezen-
towano na listingu 2.13.
}
}
2
Chris Richardson, POJOs in Action. Developing Enterprise Applications with Lightweight Frameworks,
Manning 2006.
3
Christian Bauer, Gavin King, Java Persistence with Hibernate, Manning 2006.
94 JavaServer Faces i Eclipse Galileo. Tworzenie aplikacji WWW
<filter>
<filter-name>HibernateSessionFilter</filter-name>
<filter-class>isrp.filters.HibernateSessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HibernateSessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
static {
try {// Tworzy SessionFactory na podstawie konfiguracji w pliku hibernate.cfg.xml
sessionFactory = new AnnotationConfiguration()
.configure().buildSessionFactory();
} catch (Throwable ex) {
log.error("Nie mona pobra sesji Hibernate " + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
JSF Request()
doFilter()
getSessionFactory()
beginTransaction()
service()
commit()
W dalszej czci rozdziau znajduje si opis rozwiza, jakie zapewnia Eclipse WTP
w zakresie organizacji kodu ródowego oraz integracji i wdraania skompilowanych
moduów aplikacji na serwerze.
Wszystkie pliki ródowe oraz inne zasoby aplikacji bd biblioteki musz by umiesz-
czone w projekcie skadajcym si z jednego lub wielu zagniedonych katalogów.
Projekt stanowi podstawow jednostk organizacyjn kodu aplikacji i jest zapisywany
w przestrzeni projektów (ang. workspace). Projekt opisywany jest za pomoc meta-
danych, które zawieraj pomocnicze informacje o wymaganych zasobach zewntrz-
nych, sposobie kompilacji czy rodowisku uruchomieniowym. Logiczna struktura
prezentowanych w oknie Project Explorer katalogów i zasobów projektu jest zopty-
malizowana pod ktem uatwienia pracy deweloperom.
Na rysunku 2.10 przedstawiono struktur aplikacji ISRP, która skada si z moduów
Web Application oraz Utility Module. Modu Web Application zawiera kod warstwy
prezentacji i jest tworzony w rodowisku Eclipse przy uyciu projektu typu Dynamic
Web Project (przykad takiego projektu zosta zaprezentowany w rozdziale 1.). Modu
Utility Module przechowuje warstw biznesow aplikacji ISRP i jest tworzony w ro-
dowisku Eclipse przy uyciu projektu typu Utility Project.
Warstwa biznesowa
«interface»
Interfejsy warstwy usugowej
Rysunek 2.10. Struktura moduów aplikacji ISRP oraz zalenoci wystpujce pomidzy nimi
98 JavaServer Faces i Eclipse Galileo. Tworzenie aplikacji WWW
Projekt typu Java EE Utility Project jest bardzo podobny do zwykego projektu Javy
w rodowisku Eclipse, ale posiada dodatkowy pakiet rozszerze (tzw. facet) — Utility
Module (idea pakietów rozszerze Eclipse zostaa omówiona w rozdziale 1., w ramce
„JSF Facet”). Utility Module stanowi cz konfiguracji uruchomieniowej projektu
i umoliwia wykorzystanie skompilowanego kodu projektu w innych moduach aplikacji
korporacyjnej (Java EE). Gdy zmiany w projekcie zostan zapisane, Eclipse automa-
tycznie go skompiluje i spakuje kod wynikowy do pliku JAR, który nastpnie jest pu-
blikowany (bd aktualizowany) na serwerze oraz w innych projektach, które z niego
korzystaj.
W celu utworzenia nowego projektu Java EE Utility Project naley wykona nastpujce
kroki:
1. Z menu aplikacji wybieramy opcj File/New/Project. Pojawi si okno kreatora
New Project, w którym wywietli si lista typów projektów.
2. Na licie wskazujemy grup projektów korporacyjnych (Java EE). Po rozwiniciu
elementów grupy wybieramy opcj Utility Project i zatwierdzamy przyciskiem Next.
Wywietli si okno kreatora New Java Utility Module, pokazane na rysunku 2.11.
Rysunek 2.11.
Tworzenie projektu
typu Utility Project
Rozdzia 2. i Planowanie, modelowanie i projektowanie aplikacji JSF na platformie Java 99
Rysunek 2.12.
Ustawianie zalenoci
pomidzy projektami
Java EE
100 JavaServer Faces i Eclipse Galileo. Tworzenie aplikacji WWW