tytuł oryginału: java ee 6 pocket guidespis treci 5 spis treci sowo wstpne 9 1. java platform,...

38

Upload: others

Post on 10-Mar-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE
Page 2: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Tytuł oryginału: Java EE 6 Pocket Guide

Tłumaczenie: Mikołaj Szczepaniak

ISBN: 978-83-246-6640-9

© 2013 Helion S.A.

Authorized Polish translation of the English edition Java EE 6 Pocket Guide, ISBN 9781449336684, © 2012 Arun Gupta.

This translation is published and sold by permission of O’Reilly Media, Inc.,which owns or controls all rights to publish and sell the same.

All rights reserved. No part of this book may be reproduced or transmitted inany form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permissionfrom the Publisher.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłez wykorzystania informacji zawartych w książce.

Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (księgarnia internetowa, katalog książek)

Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/jee6lkMożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Printed in Poland.

• Kup książkę• Poleć książkę • Oceń książkę

• Księgarnia internetowa• Lubię to! » Nasza społeczność

Page 3: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Spis tre�ci � 5

Spis tre�ci

S�owo wst�pne 9

1. Java Platform, Enterprise Edition 12Wprowadzenie 12Elementy sk�adowe 15Co nowego w wersji Java EE 6 19

2. Komponenty zarz�dzane 23Definiowanie i stosowanie komponentów zarz�dzanych 23Wywo�ania zwrotne cyklu �ycia 25

3. Serwlety 26Serwlety 26Filtry serwletów 32Obiekty nas�uchuj�ce zdarze� 33Obs�uga operacji asynchronicznych 37Fragmenty konfiguracji 39Bezpiecze�stwo 40Pakowanie zasobów 43Odwzorowywanie b��dów 44Obs�uga ��da� wielocz��ciowych 44

4. Java Persistence API 46Encje 46Jednostka utrwalania, kontekst utrwalania i mened�er encji 50Tworzenie, odczytywanie, aktualizowanie i usuwanie encji 52Sprawdzanie poprawno�ci encji 56Transakcje i blokowanie 58Buforowanie 60

Page 4: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

6 � Spis tre�ci

5. Enterprise JavaBeans 62Stanowe komponenty sesyjne 62Bezstanowe komponenty sesyjne 65Singletonowe komponenty sesyjne 66Komponenty sterowane komunikatami 68Przeno�ne, globalne nazwy JNDI 70Transakcje 71Przetwarzanie asynchroniczne 74Liczniki czasu 75Interfejs Embeddable API 79EJB.Lite 80

6. Konteksty i wstrzykiwanie zale�no�ci 82Punkty wstrzykiwania 83Kwalifikator i alternatywa 84Producent i dyspozytor 86Obiekty przechwytuj�ce i dekoratory 88Zasi�gi i konteksty 92Stereotypy 94Zdarzenia 95Przeno�ne rozszerzenia 97

7. JavaServer Faces 100Facelety 101Obs�uga zasobów 105Komponenty z�o�one 105Ajax 109��danie HTTP GET 113Punkty rozszerze� serwera i klienta 115Regu�y nawigacji 118

8. Us�ugi sieciowe na bazie protoko�u SOAP 119Punkty ko�cowe us�ug sieciowych 121Dynamiczne punkty ko�cowe na bazie interfejsu Provider 124Punkty ko�cowe na bazie interfejsu Endpoint 125Klient us�ugi sieciowej 127Dynamiczny klient na bazie interfejsu Dispatch 129Obiekty obs�uguj�ce 131

Page 5: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Spis tre�ci � 7

9. Us�ugi sieciowe zgodne ze stylem REST 134Proste us�ugi sieciowe zgodne z REST 135Wi�zanie metod protoko�u HTTP 137Wiele reprezentacji jednego zasobu 140Wi�zanie ��dania z zasobem 141Odwzorowywanie wyj�tków 143

10. Java Message Service 144Wysy�anie wiadomo�ci 147Jako� us�ugi 149Synchroniczne odbieranie komunikatu 150Asynchroniczne odbieranie komunikatu 152Tymczasowe miejsca docelowe 153

11. Bean Validation 154Ograniczenia wbudowane 154Definiowanie niestandardowych ogranicze� 158Grupy sprawdzania poprawno�ci 162Integracja z technologi� JPA 164Integracja z frameworkiem JSF 166

A Programowanie i wdra�anie aplikacji platformy Java EE 6— pierwsze kroki 168

B Dodatkowe materia�y 170Specyfikacje technologii internetowych 170Specyfikacje technologii korporacyjnych 170Technologie us�ug sieciowych 171Technologie zarz�dzania i zabezpiecze� 171

Skorowidz 173

O autorze 183

Kolofon 184

Page 6: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

8 � Spis tre�ci

Page 7: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

100 � Java EE 6. Leksykon kieszonkowy

Rozdzia� 7. JavaServer FacesTechnologi� JavaServer Faces (JSF) zdefiniowano w dokumencie JSR 314.Kompletn� specyfikacj� tej technologii mo�na pobra ze stronyinternetowej http://jcp.org/aboutJava/communityprocess/final/jsr314/index.html.

JavaServer Faces jest frameworkiem interfejsu u�ytkownika dzia�aj�cympo stronie serwera i stworzonym z my�l� o aplikacjach internetowychna bazie Javy. Framework JSF umo�liwia mi�dzy innymi:

� tworzenie stron internetowych przy u�yciu zbioru komponentówinterfejsu u�ytkownika wielokrotnego u�ytku, zgodnie ze wzorcemprojektowym model-widok-kontroler (ang. Model-View-Controller— MVC);

� wi�zanie komponentów z modelem po stronie serwera (dzi�kitemu jest mo�liwa dwukierunkowa migracja danych aplikacjii interfejsu u�ytkownika);

� obs�ug� nawigacji pomi�dzy stronami w odpowiedzi na zdarzeniainterfejsu u�ytkownika i interakcje z modelem;

� zarz�dzanie stanem komponentów interfejsu u�ytkownika po-mi�dzy ��daniami serwera;

� udost�pnianie prostego modelu kojarzenia zdarze� generowanychprzez klienta z kodem wykonywanym po stronie aplikacji;

� �atw� budow� i wielokrotne stosowanie niestandardowych kom-ponentów interfejsu u�ytkownika.

Aplikacja JSF sk�ada si� z nast�puj�cych elementów:

� zbioru stron internetowych, na których umieszczono komponentyinterfejsu u�ytkownika;

� zbioru komponentów zarz�dzanych; jeden zbiór takich kom-ponentów wi��e komponenty interfejsu u�ytkownika z modelempo stronie serwera (który zwykle sk�ada si� z komponentów CDIlub komponentów zarz�dzanych), drugi zbiór pe�ni funkcj� kontro-lera (na kontroler sk�adaj� si� zwykle komponenty EJB lub CDI);

� opcjonalnego deskryptora wdro�enia (pliku web.xml);

� opcjonalnego pliku konfiguracyjnego faces-config.xml;

� opcjonalnego zbioru obiektów niestandardowych, jak konwerteryczy obiekty nas�uchuj�ce, utworzonych przez programist� aplikacji.

Page 8: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Rozdzia� 7. JavaServer Faces � 101

FaceletyFacelety to j�zyk deklarowania widoków (nazywany te� mechani-zmem obs�ugi widoków) stworzony z my�l� o frameworku JSF. Faceletymaj� zast�pi technologi� JSP, której obs�ug� zachowano wy��czniez my�l� o zapewnieniu zgodno�ci wstecz. Nowe elementy wprowadzonew drugiej wersji specyfikacji JSF, w tym komponenty z�o�one i obs�ugatechnologii Ajax, s� dost�pne tylko dla autorów stron stosuj�cych face-lety. Do najwa�niejszych zalet faceletów nale�� rozbudowany systemszablonów, �atwo� tworzenia i mo�liwo� wielokrotnego stosowaniakomponentów, lepszy system raportowania o b��dach (z uwzgl�dnie-niem numerów wierszy) oraz struktura stworzona z my�l� o wygodzieprojektantów.

Strony faceletów s� tworzone przy u�yciu znaczników j�zyka XHTML1.0 i elementów kaskadowych arkuszy stylów (ang. Cascading StyleSheets — CSS). Dokument XHTML 1.0 jest t�umaczony na j�zyk HTML4 zgodnie z regu�ami standardu XML 1.0. Strona musi by zgodna ze spe-cyfikacj� XHTML-1.0-Transitional DTD (patrz strona http://www.w3.org/TR/xhtml1/#a_dtd_XHTML-1.0-Transitional).

Proste strony faceletów mo�na definiowa, stosuj�c elementy j�zykaXHTML:

<?xml version='1.0' encoding='UTF-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Tytu� strony zbudowanej przy u�yciu faceletów</title> </h:head> <h:body> Witaj w �wiecie faceletów. </h:body></html>

W powy�szym kodzie po prologu XML-a nast�puje deklaracja typudokumentu (DTD). G�ównym elementem strony jest html, czyli elementnale��cy do przestrzeni nazw http://www.w3.org/1999/xhtml. Przestrze�nazw j�zyka XML jest deklarowana dla konkretnej biblioteki znacznikówu�ywanej w kodzie danej strony. Komponenty mo�na dodawa za po-moc� znaczników faceletów (rozpoczynaj�cych si� od przedrostka h:)oraz za pomoc� znaczników j�zyka HTML.

Standardowy zbiór bibliotek znaczników obs�ugiwanych przez faceletyopisano w tabeli 7.1.

Page 9: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

102 � Java EE 6. Leksykon kieszonkowy

Tabela 7.1. Standardowy zbiór bibliotek znaczników obs�ugiwanych przez facelety

Przedrostek URI Przyk�ady

h http://java.sun.com/jsf/html h:head, h:inputTextf http://java.sun.com/jsf/core f:facet, f:actionListenerc http://java.sun.com/jsp/jstl/core c:forEach, c:iffn http://java.sun.com/jsp/jstl/functions fn:toUpperCase, fn:containsui http://java.sun.com/jsf/facelets ui:component, ui:insert

Konwencja nakazuje stosowanie rozszerzenia .xhtml dla stron interne-towych tworzonych w j�zyku XHTML.

Facelety oferuj� integracj� z j�zykiem wyra�e� EL (od ang. ExpressionLanguage). Dzi�ki temu mo�emy stosowa dwukierunkowe powi�zania��cz�ce wewn�trzne komponenty z interfejsem u�ytkownika aplikacji:

Witaj w �wiecie faceletów, mam na imi� #{name.value}!

W powy�szym kodzie #{name} jest wyra�eniem j�zyka EL odwo�uj�cymsi� do pola komponentu CDI o zasi�gu ��dania:

@Named@RequestScopedpublic class Name { private String value; // ...}

W komponencie CDI nale�y u�y adnotacji @Named, aby umo�liwiwstrzykiwanie tego komponentu do wyra�e� j�zyka EL. Zaleca si�stosowanie komponentów zgodnych ze specyfikacj� CDI zamiast kom-ponentów oznaczonych adnotacj� @javax.faces.bean.ManagedBean.

Podobnie, do wyra�enia j�zyka EL mo�na wstrzykn� komponent EJB:

@Stateless@Namedpublic class CustomerSessionBean { public List<Name> getCustomerNames() { // ... }}

W powy�szym kodzie zdefiniowano bezstanowy komponent sesyjnyz pojedyncz� metod� biznesow� zwracaj�c� list� nazwisk klientów.Adnotacja @Named oznacza ten komponent jako przeznaczony do wstrzyk-ni�cia w wyra�eniu j�zyka EL. Komponent mo�na teraz zastosowaw wyra�eniu EL faceletów:

Page 10: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Rozdzia� 7. JavaServer Faces � 103

<h:dataTable value="#{customerSessionBean.customerNames}" var="c"> <h:column>#{c.value}</h:column></h:dataTable>

W powy�szym kodzie zwrócona lista nazwisk klientów jest wy�wietlanaw tabeli. Warto zwróci uwag� na metod� getCustomerNames, która jestdost�pna jako w�a�ciwo� w wyra�eniu j�zyka EL.

Facelety oferuj� te� mechanizmy sprawdzania poprawno�ci wyra�e�EL w czasie kompilacji.

Co wi�cej, facelety oferuj� rozbudowany system szablonów, któryumo�liwia zachowywanie spójnego wygl�du i dzia�ania wszystkichstron aplikacji internetowej. Stron� bazow� (okre�lan� mianem szablonu)mo�na utworzy za pomoc� znaczników szablonowych faceletów. Stronabazowa definiuje domy�ln� struktur� w�a�ciwych stron, w tym miejscadla tre�ci, która b�dzie definiowana przy u�yciu danego szablonu. Stronyklienckie, które korzystaj� z tego szablonu, przekazuj� w�a�ciw� tre�do miejsc zdefiniowanych przez ten szablon.

W tabeli 7.2 opisano kilka najcz��ciej stosowanych znaczników szablo-nów i stron klienckich szablonów.

Tabela 7.2. Popularne znaczniki faceletów i szablonów

Znacznik Opis

ui:composition Definiuje uk�ad strony, który mo�e obejmowa� szablon. W przypadkuzastosowania atrybutu template znaczniki potomne tego znacznikadefiniuj� uk�ad szablonu. W przeciwnym razie znacznik zawiera grup�elementów, czyli struktur� z�o�on�, któr� mo�na wstawi� w dowolnymmiejscu kodu. Tre�� spoza tego znacznika jest ignorowana.

ui:insert Znacznik stosowany na stronach szablonowych s�u�y do definiowaniaobszaru wstawiania w�a�ciwej tre�ci w szablonie. Odpowiedni znacznikui:define w kodzie strony klienckiej szablonu umo�liwia zast�pienie tre�ci.

ui:define Znacznik u�ywany w kodzie strony klienckiej szablonu. Definiuje tre��wstawian� w miejscu wyznaczonym przez szablon (za pomoc�odpowiedniego znacznika ui:insert).

ui:component Umieszcza w drzewie komponentów JSF nowy komponent interfejsuu�ytkownika. Komponenty i fragmenty tre�ci spoza tego znacznika s�ignorowane.

ui:fragment Znaczenie tego znacznika jest podobne jak w przypadku ui:component,tyle �e tre�� spoza tego znacznika nie jest ignorowana.

ui:include Do��cza dokument wskazywany przez atrybut src (do��czonydokument staje si� cz��ci� bie��cej strony na bazie faceletów).

Page 11: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

104 � Java EE 6. Leksykon kieszonkowy

Strona szablonu mo�e mie nast�puj�c� posta:

<h:body>

<div id="top"> <ui:insert name="top"> <h1>Facelety s� super!</h1> </ui:insert> </div>

<div id="content" class="center_content"> <ui:insert name="content">Tre��</ui:insert> </div>

<div id="bottom"> <ui:insert name="bottom"> <center>Powered by GlassFish</center> </ui:insert> </div>

</h:body>

W powy�szym kodzie struktura zosta�a zdefiniowana za pomoc� ele-mentu <div> i arkusza stylów CSS (listing nie zawiera definicji stylów).Znacznik ui:insert definiuje tre�, która zostanie zast�piona przezstron� klienck� szablonu.

Poni�ej pokazano kod strony klienckiej tego szablonu:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html">

<body>

<ui:composition template="./template.xhtml">

<ui:define name="content"> <h:dataTable value="#{customerSessionBean.customerNames}" var="c"> <h:column>#{c.value}</h:column> </h:dataTable> </ui:define>

</ui:composition>

</body></html>

W powy�szym kodzie nie zdefiniowano znaczników ui:insert nazwa-nych top i bottom, zatem w odpowiednich sekcjach zostan� u�yte zapisystrony szablonowej. Strona kliencka zawiera element ui:define z nazw�pasuj�c� do elementu ui:insert w szablonie, zatem w tym przypadkutre� zostanie prawid�owo zast�piona.

Page 12: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Rozdzia� 7. JavaServer Faces � 105

Obs�uga zasobówFramework JSF definiuje standardowy mechanizm obs�ugi takich zaso-bów jak obrazy, arkusze stylów CSS czy skrypty j�zyka JavaScript. Wy-mienione zasoby s� niezb�dne do prawid�owego wy�wietlania kom-ponentów.

Zasoby tego typu mo�na umieszcza w katalogu /resources aplikacjiinternetowej lub w katalogu META-INF/resources w �cie�ce do klas.Zasoby mo�na dzieli wed�ug wersji j�zykowych i wed�ug numerówwyda� oraz gromadzi w wi�kszych bibliotekach.

Odwo�anie do zasobu mo�na zapisa w formie wyra�enia j�zyka EL:

<a href="#{resource['header.jpg']}">kliknij tutaj</a>

W tym przyk�adzie plik graficzny header.jpg zosta� umieszczony w stan-dardowym katalogu zasobów.

Je�li zasób znajduje si� w folderze corp (czyli w folderze zasobów biblio-teki), dost�p do tego zasobu mo�na uzyska za pomoc� atrybutu library:

<h:graphicImage library="corp" name="header.jpg" />

Skrypt j�zyka JavaScript mo�na do��czy w nast�puj�cy sposób:

<h:outputScript name="myScript.js" library="scripts" target="head"/>

W tym przyk�adzie plik myScript.js jest zasobem j�zyka JavaScript umiesz-czonym w katalogu scripts w standardowym folderze zasobów.

Arkusz stylów CSS mo�na do��czy w nast�puj�cy sposób:

<h:outputStylesheet name="myCSS.css" library="css" />

Interfejs API ResourceHandler dodatkowo oferuje programowe mechani-zmy obs�ugi zasobów.

Komponenty z�o�oneFramework JSF definiuje komponent z�o�ony jako taki, który sk�ada si�z co najmniej jednego komponentu JSF opisanego w pliku znacznikówfaceletów. Odpowiedni plik .xhtml nale�y umie�ci w bibliotece zaso-bów. Takie rozwi�zanie umo�liwia tworzenie komponentów wielo-krotnego u�ytku na podstawie dowolnego fragmentu strony.

Page 13: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

106 � Java EE 6. Leksykon kieszonkowy

Definiowanie komponentu kompozytowego polega na definiowaniustrony, natomiast stosowanie tego komponentu sprowadza si� do stoso-wania strony. Strona definiuj�ca komponent zawiera metadane (para-metry) opisane w znaczniku <cc:interface> oraz w�a�ciw� implementacj�w znaczniku <cc:implementation>, gdzie cc jest przedrostkiem dla prze-strzeni nazw http://java.sun.com/jsf/composite/. Wymagania dotycz�cedefiniowania metadanych by mo�e zostan� z�agodzone w przysz�ychwersjach specyfikacji JSF — niezb�dne informacje b�dzie wówczasmo�na umieszcza w samej implementacji.

Komponent kompozytowy mo�na zdefiniowa tak�e przy u�yciu ele-mentów frameworku JSF 1.2, jednak budowa komponentów w ten sposóbwymaga dobrej znajomo�ci cyklu �ycia JSF i odpowiedniego przygoto-wania wielu plików. Framework JSF2 znacznie upraszcza konstruowaniekomponentów z�o�onych wy��cznie na poziomie plików j�zyka XHTML.

Przypu�my, �e przyk�adowy facelet zawiera nast�puj�cy fragment koduodpowiedzialny za wy�wietlanie formularza logowania:

<h:form> <h:panelGrid columns="3"> <h:outputText value="Nazwa:" /> <h:inputText value="#{user.name}" id="name"/> <h:message for="name" style="color: red" /> <h:outputText value="Has�o:" /> <h:inputText value="#{user.password}" id="password"/> <h:message for="password" style="color: red" /> </h:panelGrid>

<h:commandButton actionListener="#{userService.register}" id="loginButton" action="status" value="Wy�lij"/></h:form>

Powy�szy kod wy�wietla tabel� z�o�on� z dwóch wierszy i trzech ko-lumn (patrz rysunek 7.1).

Rysunek 7.1. Strona faceletów JSF wy�wietlona w oknie przegl�darki internetowej

Page 14: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Rozdzia� 7. JavaServer Faces � 107

Pierwsza kolumna zawiera etykiety pól formularza; druga kolumnazawiera pola tekstowe, w których u�ytkownik powinien wpisa daneuwierzytelniaj�ce. Trzecia kolumna (która pocz�tkowo jest pusta) s�u�ydo wy�wietlania komunikatów zwi�zanych z warto�ciami w odpo-wiednich polach. Pierwszy wiersz kojarzy pole tekstowe formularzaz polem User.name; drugi wiersz kojarzy pole tekstowe formularza z po-lem User.password. Formularz zawiera te� przycisk polecenia, któregoklikni�cie powoduje wywo�anie metody register komponentu UserService.

Tak skonstruowany formularz logowania mo�na wy�wietla na wielustronach. Okazuje si� jednak, �e nie musimy za ka�dym razem powta-rza tego kodu — wystarczy przekszta�ci ten fragment w komponentz�o�ony. W tym celu interesuj�cy nas fragment nale�y skopiowa dopliku .xhtml, a sam plik nale�y skopiowa do biblioteki w standardo-wym katalogu zasobów. Zgodnie z zasad� konwencji ponad konfiguracj�do wspomnianego fragmentu automatycznie zostanie przypisana prze-strze� nazw i nazwa znacznika.

Je�li pokazany wcze�niej fragment zostanie skopiowany do pliku login.xhtml w katalogu resources/mycomp, strona definiuj�ca b�dzie mia�a na-st�puj�c� posta:

<?xml version='1.0' encoding='UTF-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:cc="http://java.sun.com/jsf/composite" xmlns:h="http://java.sun.com/jsf/html">

<!-- INTERFEJS --><cc:interface></cc:interface>

<!-- IMPLEMENTACJA --><cc:implementation> <h:form> <h:panelGrid columns="3"> <h:outputText value="Nazwa:" /> <h:inputText value="#{user.name}" id="name"/>

<!-- . . . -->

</h:form> </cc:implementation></html>

W tym kodzie element cc:interface definiuje metadane, które z koleiopisuj� cechy komponentu (w tym atrybuty, fasety, punkty wi�zaniaz metodami nas�uchuj�cymi zdarze�). Element cc:implementation zawierakod j�zyka znaczników wstawiany w miejsce komponentu z�o�onego.

Page 15: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

108 � Java EE 6. Leksykon kieszonkowy

Przestrze� nazw komponentu z�o�onego jest konstruowana przez kon-katenacj� adresu http://java.sun.com/jsf/composite/ i nazwy mycomp. Nazwaznacznika jest tworzona na podstawie nazwy pliku strony (bez rozsze-rzenia .xhtml):

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:mc="http://java.sun.com/jsf/composite/mycomp"

<!-- . . . --> <mc:login/>

</html>

Przypu�my, �e fragment kodu musi przekazywa ró�ne wyra�enia(zamiast stosowanego wcze�niej wyra�enia #{user.name}) i wywo�ywaró�ne metody (zamiast wywo�ywanej do tej pory metody #{userService.�register}) w zale�no�ci o strony, na której umieszczono komponentz�o�ony. Odpowiednie warto�ci mog� by przekazywane przez stron�definiuj�c�:

<!-- INTERFEJS --><cc:interface> <cc:attribute name="name"/> <cc:attribute name="password"/> <cc:attribute name="actionListener" method-signature= "void action(javax.faces.event.Event)" targets="ccForm:loginButton"/> </cc:interface>

<!-- IMPLEMENTACJA --> <cc:implementation> <h:form id="ccForm"> <h:panelGrid columns="3"> <h:outputText value="Nazwa:" /> <h:inputText value="#{cc.attrs.name}" id="name"/> <h:message for="name" style="color: red" /> <h:outputText value="Has�o:" /> <h:inputText value="#{cc.attrs.password}" id="password"/> <h:message for="password" style="color: red" /> </h:panelGrid>

<h:commandButton id="loginButton" action="status" value="submit"/> </h:form></cc:implementation>

W tym kodzie wszystkie parametry dla jasno�ci wymieniono w elemen-cie cc:interface. Trzeci parametr zawiera atrybut odwo�uj�cy si� do polaccForm:loginButton.

Page 16: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Rozdzia� 7. JavaServer Faces � 109

Najwa�niejsze cechy elementu cc:implementation:

� Element h:form zawiera atrybut id. Atrybut id jest niezb�dny, je�liprzycisk formularza ma by przedmiotem bezpo�rednich odwo�a�.

� Element h:inputText u�ywa teraz wyra�enia #{cc.attrs.xxx} (za-miast stosowanego wcze�niej wyra�enia #{user.xxx}). #{cc.attrs}jest domy�lnym wyra�eniem j�zyka EL stosowanym przez auto-rów komponentów kompozytowych i umo�liwiaj�cym dost�p doatrybutów bie��cego komponentu. W tym przypadku #{cc.attrs}zapewnia dost�p do atrybutów name i password.

� actionListener jest punktem dowi�zania metody nas�uchuj�cej zda-rze�. W tym przypadku zastosowano atrybut method-signature opi-suj�cy sygnatur� odpowiedniej metody.

� Element h:commandButton zawiera atrybut id, dzi�ki czemu mo�e byjednoznacznie identyfikowany w ramach elementu h:form.

W kodzie strony korzystaj�cej z komponentu warto�ci user, passwordi actionListener s� przekazywane w formie wymaganych atrybutów:

<ez:login name="#{user.name}" password="#{user.password}" actionListener="#{userService.register}"/>

Strona korzystaj�ca z tego komponentu mo�e teraz przekazywa ró�nekomponenty wewn�trzne, a zdarzenie naci�ni�cie przycisku wys�aniaformularza b�dzie powodowa�o wywo�ania ró�nych metod biznesowych.

W najwi�kszym skrócie komponenty z�o�one maj� nast�puj�ce zalety:

� Koncepcja tych komponentów jest w pe�ni zgodna z zasad� uni-kania powtórze� (DRY), poniewa� umo�liwia umieszczenie w jed-nym miejscu (pliku) kodu wielokrotnie stosowanego na ró�nychstronach.

� Umo�liwia programistom tworzenie nowych komponentów bezkonieczno�ci pisania kodu Javy ani przygotowywania konfiguracjiw formacie XML.

AjaxFramework JSF oferuje wbudowane mechanizmy obs�ugi elementówtechnologii Ajax na stronach internetowych. Dzi�ki temu istnieje mo�li-wo� cz��ciowego przetwarzania widoków — w takim przypadku

Page 17: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

110 � Java EE 6. Leksykon kieszonkowy

tylko niektóre komponenty widoku s� u�ywane do wygenerowaniaodpowiedzi. ��dania Ajax umo�liwiaj� tak�e cz��ciowe wy�wietlaniestrony (wy�wietlanie wybranych komponentów zamiast ca�ej strony).

Obs�ug� technologii Ajax mo�na w��czy na dwa sposoby:

� programowo (przy u�yciu zasobów j�zyka JavaScript);

� deklaratywnie (za pomoc� elementu f:ajax).

Programowa integracja z technologi� Ajax jest mo�liwa dzi�ki mechani-zmowi obs�ugi zasobów. Plik jsf.js jest predefiniowanym zasobemw ramach biblioteki javax.faces. Wspomniany zasób zawiera interfejsAPI JavaScriptu, który znacznie upraszcza interakcj� stron JSF z tech-nologi� Ajax. Elementy tego interfejsu mo�na udost�pni w kodzie stronza pomoc� znacznika outputScript:

<h:body><!-- . . . --><h:outputScript name="jsf.js" library="javax.faces" target="body"/><!-- . . . --></h:body>

Do wysy�ania na serwer asynchronicznych ��da� mo�na u�y koduw tej formie:

<h:form prependId="false"> <h:inputText value="#{user.name}" id="name"/> <h:inputText value="#{user.password}" id="password"/> <h:commandButton value="Login" type="button" actionListener="#{user.login}" onclick="jsf.ajax.request(this, event, {execute: 'name password', render: 'status'}); return false;"/>

<h:outputText value="#{user.status}" id="status"/></h:form>

W powy�szym kodzie:

� Dwa pierwsze pola tekstowe s�u�� do wpisywania nazwy u�yt-kownika i has�a; trzecie pole odpowiada za wy�wietlanie statusu(w tym przypadku informacji, czy u�ytkownik jest zalogowany).

� Atrybutowi prependId znacznika formularza przypisano warto�false, aby zagwarantowa, �e identyfikatory poszczególnych ele-mentów zostan� zachowane w oryginalnej formie. W przeciwnymrazie framework JSF poprzedzi�by identyfikatory elementów po-tomnych identyfikatorem samego formularza.

Page 18: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Rozdzia� 7. JavaServer Faces � 111

� Przycisk polecenia zawiera atrybut actionListener identyfikuj�cymetod� klasy komponentu, która ma by wywo�ywana w odpo-wiedzi na zdarzenia klikni�cia tego przycisku. Zamiast oczekiwatypowej odpowiedzi powoduj�cej wygenerowanie i wy�wietlenieinnej strony, funkcja jsf.ajax.request powoduje wys�anie asyn-chronicznego ��dania na serwer. ��danie jest tworzone w odpo-wiedzi na zdarzenie onclick (klikni�cia) przycisku polecenia. Pos�owach execute i render przekazano identyfikatory komponentówoddzielone spacjami. S�owo execute poprzedza list� komponentówwej�ciowych, dla których zostan� wywo�ane metody ustawiaj�ceklasy komponentu; po s�owie render przekazano list� komponen-tów, które nale�y wy�wietli po otrzymaniu asynchronicznejodpowiedzi.

Mo�liwo� przetwarzania tylko cz��ci widoku (w tym przypadkuelementów name i password) okre�la si� mianem cz��ciowegoprzetwarzania widoku (ang. partial view processing). Podobnie,wy�wietlanie tylko cz��ci strony wynikowej (w tym przypadkutylko elementu status) okre�la si� mianem cz��ciowego wy�wietla-nia wyniku (ang. partial output rendering).

Obs�ugiwane warto�ci atrybutu render opisano w tabeli 7.3.

Tabela 7.3. Warto�ci atrybutu render znacznika f:ajax

Warto�� Opis

@all Wszystkie komponenty na danej stronie@none �aden z komponentów na stronie (@none jest warto�ci� domy�ln�)@this Element, który spowodowa� dane ��danie@form Wszystkie komponenty nale��ce do danego formularzaIdentyfikatory Identyfikatory komponentów oddzielone spacjamiWyra�enie EL Wyra�enie j�zyka EL, które po przetworzeniu reprezentuje kolekcj�

�acuchów

Atrybutowi execute mo�na przypisa podobny zbiór warto�ci,jednak w jego przypadku warto�ci� domy�ln� jest @this.

� Komponent User zawiera pola, metody ustawiaj�ce i zwracaj�ceoraz prost� metod� biznesow�:

@Named@SessionScopedpublic class User implements Serializable { private String name; private String password;

Page 19: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

112 � Java EE 6. Leksykon kieszonkowy

private String status;

. . .

public void login(ActionEvent evt) { if (name.equals(password)) status = "Prawid�owe logowanie"; else status = "Nieudane logowanie"; }}

Warto zwróci uwag� na sygnatur� metody login. Metoda musizwraca typ void i otrzymywa na wej�ciu (za po�rednictwemjedynego parametru) obiekt klasy javax.faces.event.ActionEvent.

Deklaratywna integracja z technologi� Ajax jest mo�liwa dzi�ki ele-mentowi f:ajax. Znacznik f:ajax mo�na albo umie�ci wewn�trz kom-ponentu (dzi�ki temu asynchroniczne ��dania Ajax b�d� stosowanetylko dla tego komponentu), albo wykorzysta do opakowania wielukomponentów (wówczas ��dania Ajax b�d� stosowane dla tych kom-ponentów).

Aby zastosowa ten styl integracji z technologi� Ajax, poprzedni przy-k�ad kodu nale�a�oby przebudowa w ten sposób:

<h:form prependId="false"> <h:inputText value="#{user.name}" id="name"/> <h:inputText value="#{user.password}" id="password"/> <h:commandButton value="Login" type="button" actionListener="#{user.login}"> <f:ajax execute="name password" render="status"/> </h:commandButton>

<h:outputText value="#{user.status}" id="status"/></h:form>

W tym kodzie u�yto znacznika f:ajax do zdefiniowania listy elementówwej�ciowych (za pomoc� atrybutu execute) oraz elementów wyj�ciowychdo wy�wietlenia (za pomoc� atrybutu render). Je�li znacznik f:ajax jestzagnie�d�ony w ramach pojedynczego komponentu i je�li nie wskazano�adnego zdarzenia, asynchroniczne ��danie jest generowane w odpo-wiedzi na domy�lne zdarzenie komponentu macierzystego (w przypadkuprzycisku polecenia takim zdarzeniem jest onclick).

Page 20: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Rozdzia� 7. JavaServer Faces � 113

Znacznik f:ajax mo�na stosowa tak�e dla wielu komponentów:

<f:ajax listener="#{user.checkFormat}"> <h:inputText value="#{user.name}" id="name"/> <h:inputText value="#{user.password}" id="password"/></f:ajax>

Tym razem w znaczniku f:ajax zdefiniowano atrybut listener wska-zuj�cy odpowiedni� metod� Javy:

public void checkFormat(AjaxBehaviorEvent evt) { // ...}

Metoda nas�uchuj�ca jest wywo�ywana dla domy�lnego zdarzenia ele-mentów potomnych (w przypadku elementu h:inputText b�dzie to zda-rzenie valueChange). Dodatkowe mechanizmy na bazie technologii Ajaxmo�na wskaza tak�e dla elementów potomnych — wystarczy u�yzagnie�d�onych znaczników f:ajax.

�danie HTTP GETFramework JSF oferuje obs�ug� odwzorowywania parametrów ��daniaGET protoko�u HTTP (zawartych w adresie URL) na wyra�enia j�zykaEL. JSF umo�liwia te� generowanie adresów URL przystosowanych do��da� GET.

Parametry widoku mog� by u�ywane do odwzorowywania parame-trów zawartych w adresie URL (sk�adaj�cych si� na ��danie GET) naelementy j�zyka wyra�e� EL. W tym celu nale�y umie�ci w kodziestrony faceletów nast�puj�cy fragment:

<f:metadata> <f:viewParam name="name" value="#{user.name}"/></f:metadata>

Skutki dost�pu do aplikacji internetowej za po�rednictwem adre-su index.xhtml?name=jack opisano poni�ej:

� Uzyskujemy parametr ��dania nazwany name.

� W razie konieczno�ci konwertujemy i sprawdzamy popraw-no� tego parametru. Mo�emy to zrobi za pomoc� elementówf:converter i f:validator (tak jak w przypadku ka�dego pola typuh:inputText). Przyk�ad takiego rozwi�zania pokazano poni�ej:

<f:metadata> <f:viewParam name="name" value="#{user.name}"> <f:validateLength minimum="1" maximum="5"/>

Page 21: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

114 � Java EE 6. Leksykon kieszonkowy

</f:viewParam></f:metadata>

� Je�li warto� jest prawid�owa, parametr jest kojarzony z polem#{user.name}.

Parametry widoku mo�na przetwarza tak�e bezpo�rednio przed wy-�wietleniem strony (za pomoc� elementu f:event):

<f:metadata> <f:viewParam name="name" value="#{user.name}"> <f:validateLength minimum="1" maximum="5"/> </f:viewParam> <f:event type="preRenderView" listener="#{user.process}"/></f:metadata>

W powy�szym kodzie metoda identyfikowana przez wyra�enie #{user.�process} mo�e zosta u�yta do ewentualnej inicjalizacji przed w�a-�ciwym wy�wietleniem strony.

Adresy URL przystosowane do obs�ugi ��da� GET s� generowane zapomoc� elementów h:link i h:button. Zamiast r�cznego konstruowaniaadresu URL wskazano odpowiedni� stron� faceletów:

<h:link value="Zaloguj" outcome="login"/>

Ten zapis jest t�umaczony na nast�puj�cy znacznik j�zyka HTML:

<a href=".../faces/login.xhtml">Zaloguj</a>

Równie �atwo mo�na zdefiniowa parametry widoku:

<h:link value="Zaloguj" outcome="login"> <f:param name="name" value="#{user.name}"/></h:link>

Je�li w powy�szym kodzie z wyra�eniem #{user.name} zostanie powi�zanawarto� "Jacek", przytoczony fragment zostanie przet�umaczony na na-st�puj�cy znacznik HTML-a:

<a href=".../faces/login.xhtml?name=Jacek">Zaloguj</a>

Podobnie, istnieje mo�liwo� okre�lenia wyniku za pomoc� elementuh:button:

<h:button value="login"/>

Kod w tej formie wygeneruje nast�puj�cy znacznik j�zyka HTML:

<input type="button" onclick="window.location.href='/JSFSample/faces/index.xhtml'; returnfalse;" value="login" />

Page 22: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Rozdzia� 7. JavaServer Faces � 115

Punkty rozszerze� serwera i klientaKonwertery, obiekty nas�uchuj�ce i mechanizmy sprawdzania popraw-no�ci to obiekty do��czane po stronie serwera, których celem jestwprowadzanie dodatkowych funkcji do komponentów umieszczonychna stronie. Zachowania to z kolei punkty rozszerze� strony klienckiej,które uzupe�niaj� tre� wy�wietlanego komponentu o dodatkowe skrypty.

Konwerter odpowiada za konwersj� danych wpisanych w komponenciez jednego formatu na inny format (na przyk�ad z �a�cucha na liczb�).Framework JSF udost�pnia wiele wbudowanych konwerterów, w tymf:convertNumber i f:convertDateTime. Konwertery mo�na �atwo stosowadla wszystkich komponentów z mo�liwo�ci� edycji:

<h:form> Wiek: <h:inputText value="#{user.age}" id="age"> <f:convertNumber integerOnly="true"/> </h:inputText> <h:commandButton value="Wy�lij"/></h:form>

Tekst wpisany w polu tekstowym zostanie przekonwertowany (o ileb�dzie to mo�liwe) na liczb� ca�kowit�. Je�li konwersja tekstu b�dzieniemo�liwa, zostanie wy�wietlony komunikat o b��dzie.

Istnieje te� mo�liwo� utworzenia niestandardowego konwertera:

@FacesConverter("myConverter")public class MyConverter implements Converter {

@Override public Object getAsObject( FacesContext context, UIComponent component, String value) { // ... }

@Override public String getAsString( FacesContext context, UIComponent component, Object value) { // ... }}

W tym przypadku metody getAsObject i getAsString wykonuj� odpo-wiednio konwersje obiektu na �a�cuch i �a�cucha na obiekt pomi�-dzy obiektami modelu danych a ich reprezentacjami �a�cuchowymi

Page 23: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

116 � Java EE 6. Leksykon kieszonkowy

(potrzebnymi do wy�wietlania na stronie). Zastosowany obiekt POJOimplementuje interfejs Converter i jest oznaczony adnotacj� @FacesConverter.Funkcj� konwertera mo�e pe�ni tak�e strona JSF:

<h:inputText value="#{user.age}" id="age"> <f:converter converterId="myConverter"/></h:inputText>

Warto� atrybutu value adnotacji @FacesConverter musi by zgodnaz warto�ci� u�ytego powy�ej atrybutu converterId.

Mechanizm sprawdzania poprawno�ci danych (tzw. walidator) s�u�ydo weryfikacji danych wpisanych za po�rednictwem komponentówwej�ciowych. Framework JSF udost�pnia wiele wbudowanych mecha-nizmów sprawdzania poprawno�ci, w tym f:validateLength i f:validate�DoubleRange. Mechanizmy sprawdzania poprawno�ci mo�na �atwo sto-sowa dla wszystkich komponentów z mo�liwo�ci� edycji:

<h:inputText value="#{user.name}" id="name"> <f:validateLength min="1" maximum="10"/></h:inputText>

W powy�szym kodzie okre�lono, �e d�ugo� �a�cucha wpisywanegow polu tekstowym musi si� mie�ci w przedziale od 1 do 10 znaków.Je�li d�ugo� danych nie b�dzie nale�a�a do tego przedzia�u, zostaniewy�wietlony komunikat o b��dzie.

Istnieje te� mo�liwo� utworzenia niestandardowego mechanizmusprawdzania poprawno�ci:

@FacesValidator("nameValidator")public class NameValidator implements Validator {

@Override public void validate( FacesContext context, UIComponent component, Object value) throws ValidatorException { // ... }}

W powy�szym kodzie metoda validate zwraca sterowanie, pod wa-runkiem �e sprawdzana warto� jest poprawna. W przeciwnym raziemetoda zg�asza wyj�tek ValidatorException. Mechanizmy sprawdzaniapoprawno�ci mo�na stosowa dla dowolnego komponentu z mo�liwo-�ci� edycji:

<h:inputText value="#{user.name}" id="name"> <f:validator id="nameValidator"/></h:inputText>

Page 24: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Rozdzia� 7. JavaServer Faces � 117

Warto� atrybutu value adnotacji @FacesValidator musi by zgodnaz warto�ci� atrybutu id elementu f:validator.

Framework JSF dodatkowo oferuje wbudowane mechanizmy integracjiz ograniczeniami definiowanymi na bazie frameworku Bean Validation.Zadanie programisty sprowadza si� do umieszczania odpowiednichadnotacji w kodzie komponentu (definiowanie ogranicze� nie wymaga�adnych dodatkowych czynno�ci). Ewentualne komunikaty o b��dach(wskutek naruszenia ogranicze�) s� automatycznie konwertowane naobiekty klasy FacesMessage i prezentowane u�ytkownikowi ko�cowemu.Do definiowania grup sprawdzania poprawno�ci mo�na u�y atrybutuvalidationGroups znacznika f:validateBean — w ten sposób mo�na wska-za dodatkowe komponenty do sprawdzenia podczas weryfikacji okre-�lonego komponentu. Wspomniane rozwi�zania zostan� szczegó�owowyja�nione w rozdziale po�wi�conym specyfikacji Bean Validation.

Obiekt nas�uchuj�cy nas�uchuje zdarze� dotycz�cych komponentu.Zdarzenie mo�e polega na zmianie warto�ci, klikni�ciu przycisku,klikni�ciu linku lub dowolnym innym dzia�aniu. Obiekt nas�uchuj�cymo�e mie posta metody komponentu zarz�dzanego lub samej klasy.

Obiekt ValueChangeListener mo�na zarejestrowa dla dowolnego kompo-nentu z mo�liwo�ci� edycji:

<h:inputText value="#{user.age}" id="age" valueChangeListener="#{user.nameUpdated}">

W powy�szym kodzie metoda nameUpdated komponentu User jest wy-wo�ywana w momencie wysy�ania powi�zanego formularza. Obiektnas�uchuj�cy na poziomie klasy mo�na utworzy, implementuj�c interfejsValueChangeListener. Odpowiedni obiekt mo�na wskaza w kodzie stronyza pomoc� znacznika f:valueChangeListener.

W przeciwie�stwie do konwerterów, mechanizmów sprawdzania po-prawno�ci i obiektów nas�uchuj�cych zachowanie rozszerza mechani-zmy strony klienckiej, poniewa� umo�liwia deklaratywne do��czanieskryptów. Na przyk�ad znacznik f:ajax zdefiniowano jako zachowaniestrony klienckiej. Opisany mechanizm dodatkowo umo�liwia weryfikacj�poprawno�ci danych po stronie klienta, rejestrowanie zdarze� w dzien-niku po stronie klienta itp.

Niestandardowe zachowanie mo�na definiowa przez rozszerzanie klasyClientBehaviorBase i oznaczanie klas potomnych adnotacj� @FacesBehavior.

Page 25: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

118 � Java EE 6. Leksykon kieszonkowy

Regu�y nawigacjiFramework JSF definiuje niejawne i jawne regu�y nawigacji.

Niejawne regu�y nawigacji dotycz� wyników pewnych czynno�ci (naprzyk�ad klikni�cia linku lub przycisku). Je�li zostanie znaleziona stronafaceletów pasuj�ca do tej akcji, w�a�nie ta strona zostanie wy�wietlona.

<h:commandButton action="login" value="Zaloguj"/>

W tym przypadku klikni�cie przycisku spowoduje wy�wietlenie stronylogin.xhtml znajduj�cej si� w tym samym katalogu.

Jawne regu�y nawigacji mo�na definiowa za po�rednictwem elementu<navigation-rule> w pliku faces-config.xml. Do definiowania warunko-wych regu� nawigacji s�u�y znacznik <if>:

<navigation-rule> <from-view-id>/index.xhtml</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/login.xhtml</to-view-id> <if>#{user.isPremium}</if> </navigation-case></navigation-rule>

W powy�szym kodzie nawigacja pomi�dzy stronami index.xhtml i login.xhtml ma miejsce tylko w sytuacji, gdy u�ytkownik nale�y do grupywa�nych klientów.

Page 26: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

172 � Java EE 6. Leksykon kieszonkowy

asedzielewski
Prostokąt
Page 27: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

173

Skorowidz

Aadnotacja, 12

@Alternative, 86, 95@ApplicationPath, 136@AroundInvoke, 89@AssertFalse, 155@AssertTrue, 155@Asynchronous, 74@Constraint, 159@Context, 141@CookieParam, 141@DecimalMax, 156@DecimalMin, 155@DELETE, 138@DenyAll, 42@DependsOn, 67@Digits, 156@Discriminator, 48@EJB, 65@ElementCollection, 47@Embeddable, 47@Embedded, 47@Entity, 46@FacesBehavior, 117@Fancy, 84@FormParam, 137, 141@Future, 157@GroupSequence, 164@HEAD, 139@HeaderParam, 141@HttpConstraint, 41@HttpMethodConstraint, 41@Inheritance, 48@Inject, 83, 86@Interceptor, 89@InterceptorBinding, 88@ManyToMany, 48

@ManyToOne, 48@MapKey, 49@MapKeyClass, 49@MapKeyColumn, 49@MappedSuperclass, 48@MatrixParam, 141@Max, 156@MessageDriven, 68, 152@Min, 155@MultipartConfig, 44, 45@Named, 85, 102@NamedQuery, 55@NotNull, 155, 159@Null, 155@OneToMany, 48@OneToOne, 48@Oneway, 123@OPTIONS, 139@Past, 157@Path, 13, 135@PathParam, 135@Pattern, 157, 159@PermitAll, 42@POST, 137@PostActivate, 64@PrePassivate, 64@Provider, 140@Qualifier, 86@QueryParam, 136@Remote, 63, 65@Remove, 63@RolesAllowed, 42@Schedule, 19, 75@ServiceMode, 125@ServletSecurity, 40@Singleton, 12@Size, 156, 159@SOAPBinding, 123

Page 28: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

174 � Skorowidz

adnotacja@SQLResultSetMapping, 53@Startup, 67@Stateful, 12, 63@Stateless, 12, 65@Stereotype, 94@Target, 89, 158@Timeout, 75@TransactionAttribute, 72@TransactionManagement, 71@TransportProtected, 42@Valid, 57, 161@WebFault, 123@WebFilter, 32@WebInitParam, 32@WebListener, 33@WebService, 121@WebServiceProvider, 124@WebServlet, 12, 26@XmlRootElement, 135@ZipCode, 159FetchType.EAGER, 48FetchType.LAZY, 48

adres URL, 113Ajax, 109aktualizowanie encji, 55aktywacja komponentu, 64aplikacje korporacyjne, 14asynchroniczne ��danie, 130atak XSS, 29atrybut

country, 159execute, 111group, 159payload, 159render, 111

atrybuty@WebService, 121@WebServiceProvider, 124

automatyczna weryfikacja, 56

BBean Validation, 18, 56, 154bezpiecze�stwo, 40bezpiecze�stwo w�tków, 50

bezstanowy komponent sesyjny, 65,74

biblioteki znaczników, 101blokada Write, 67blokady

optymistyczne, 59pesymistyczne, 59

blokowanie encji, 59b��d nieprawid�owej zale�no�ci, 86b��dy, 44buforowanie, 60

CCDI, Contexts and Dependency

Injection, 14, 82cia�o komunikatu, 132CRUD, create, read, update, delete,

52CSS, Cascading Style Sheets, 101cykl �ycia

encji, 52obiektów, 33serwletu, 28

cz��cioweprzetwarzanie widoków, 109wy�wietlanie strony, 110

Ddefiniowanie

komponentu kompozytowego,106

ogranicze�, 41zasi�gów, 94

deklarowaniefiltrów, 33serwletów, 31

dekoratory, 91deskryptor wdro�enia

aplikacji internetowej, 28web.xml, 29

dezaktywacja komponentu, 64do��czanie

arkusza stylów, 105skryptu, 105

Page 29: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Skorowidz � 175

dostawca JMS, 144, 149dost�p do

serwletów, 40zasobu, 141

DRY, Don’t Repeat Yourself, 54dzielenie konfiguracji, 18

EEJB, Enterprise JavaBeans, 13, 62EJB.Lite, 81EL, Expression Language, 102element

<absolute-ordering>, 39<after>, 40<alternatives>, 86<async-supported>, 37<auth-constraint>, 41<before>, 40<error-page>, 44<exception-type>, 44<filter>, 32<filter-mapping>, 32<interceptors>, 90<name>, 39<navigation-rule>, 118<ordering>, 39, 40<others/>, 39<security-constraint>, 41<user-data-constraint>, 41<web-resource-collection>, 41cc:implementation, 107, 109cc:interface, 107, 108f:ajax, 111f:converter, 113f:event, 114f:validateBean, 117, 163f:validator, 113h:button, 114h:link, 114html, 101outputScript, 110shared-cache-mode, 60validation-mode, 165

elementy WSDL, 127encje, 46Enterprise JavaBeans, 19

Ffabryka mened�era encji, 165facelety, 21, 101filtr LoggingFilter, 32filtry serwletów, 32formularz logowania, 106fragment komunikacji, web

fragment, 39framework

Bean Validation, 117JSF, 100, 166JSF2, 106OSGi, 18

Gglobalne nazwy JNDI, 70grupa Default, 165grupy sprawdzania poprawno�ci,

162, 165

Iimplementacja

punktu ko�cowego, 126referencyjna, 15

instancja kontekstowej, 82interfejs

API Embeddable EJB, 19API EntityTransaction, 58AsyncListener, 36BindingProvider, 128Criteria API, 53Dispatch, 129Embeddable API, 79Endpoint, 125Event, 96Greeting, 83, 84HttpServletRequest, 42HttpSession, 30HttpSessionActivationListener, 35HttpSessionAttributeListener, 35HttpSessionBindingListener, 35HttpSessionListener, 34JPA, 46

Page 30: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

176 � Skorowidz

interfejsJTA, 58LogicalHandler, 131MessageBodyReader, 140MessageBodyWriter, 140MessageListener, 68, 152Provider, 124Provider<DataSource>, 124Provider<SOAP message>, 125Provider<Source>, 125Servlet, 27ServletContextAttributeListener,

34ServletRequestAttributeListener,

36ServletRequestListener, 36SPI, 97TimedObject, 77

JJava EE, 12JavaServer Faces, 100JAXB, Java API for XML Binding, 120JAXR, Java API for XML Registries, 13JAX-RPC, Java API for XML-based

RPC, 13JAX-RS, Java API for RESTful Web

Services, 13, 20, 134JAX-WS, Java API for XML Web

Services, 13, 119JCP, Java Community Process, 14jednostka utrwalania, 50j�zyk

deklarowania widoków, 101WSDL, 119wyra�e� EL, 102XHTML 1.0, 101zapyta� JPQL, 53zapyta� SQL, 53

JMS, Java Message Service, 68, 144JPA, Java Persistence API, 21, 46, 164JPQL, Java Persistence Query

Language, 53JSF, JavaServer Faces, 13, 21, 100, 166JSR, Java Specification Request, 15

Kkatalog

META-INF, 39resources, 43

klasaApplication, 136FacesMessage, 117GreetingService, 84MessageContext, 132Order, 135Response, 143Service, 127

klasydost�pne do wbudowania, 47mechanizmu odwzorowuj�cego, 143

klientJMS, 144us�ugi sieciowej, 127

kluczdo platformy, 168g�ówny, primary key, 46obcy, foreign key, 46

komponentFoo, 67ServletFilter, 14ServletListener, 14User, 111

komponenty, 13dost�pne lokalnie, 63, 65EJB, 19

encyjne, 62sesyjne, 62sterowane komunikatami, 68

kompozytowe, 106MDB, 68sesyjne

bezstanowe, 65singletonowe, 66stanowe, 62

zarz�dzane, Managed Beans, 19, 23z�o�one, 105

komunikat, 123, 132, 144JMS, 144

cia�o, 146nag�ówek, 145w�a�ciwo�ci, 145

o b��dzie, 117, 159

Page 31: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Skorowidz � 177

konfiguracja encji, 51konfigurowanie kontenera EJB, 80kontekst, 14, 22, 82, 92

cyklu �ycia, 82serwletów, 29utrwalania, 50, 52

kontenerEJB, 80serwletów, 26

konwerter, 115f:convertDateTime, 115f:convertNumber, 115

konwertery niestandardowe, 115koperta, envelope, 119kwalifikator, 84kwalifikatory CDI, 85

Lliczniki czasu, 75

�a�cuch obiektów, 133

MMDB, message-driven bean, 68mechanizm

adnotacji, 12sprawdzania poprawno�ci, 116rozszerze�, 14

mened�er encji, 50, 51metadane, 95metoda

addFilter, 33addServlet, 31AsyncContext.complete, 37authenticate, 42cleanupResources, 25consumer.receive, 151doGet, 38ejbTimeout, 77EntityManager.merge, 55EntityManager.remove, 56EntityTransaction.rollback, 59

getCustomerNames, 103getOrder, 136, 143getParts, 45getPort, 128handleFault, 132handleMessage, 132HttpServletRequest.getRequestDi

spatcher, 30HttpServletResponse.sendRedirect,

30init, 28login, 42onMessage, 68, 152Persistence.createEntityManager�Factory, 165

PostConstruct, 66PreDestroy, 66producenta, 86putXml, 138ServletContainerInitializer.�onStartup, 31, 36

ServletContext.getContext, 30ServletContext.getRequest�Dispatcher, 30

ServletContextListener.�contextInitialized, 36

ServletRegistration.setAsync�Supported, 37

session.getAttribute, 30session.setAttribute, 30setupResources, 25validate, 116Validator.validate, 56

metodybiznesowe, 123protoko�u HTTP, 137zasobu, 140

modelnajpierw kod, code first, 121najpierw kontrakt, contract first,

121publikacja-subskrypcja, 145punkt-punkt, 144

MOM, Message-orientedmiddleware, 144

MVC, Model-View-Controller, 100

Page 32: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

178 � Skorowidz

Nnag�ówek

Accept, 140Content-Type, 140

narz�dzie wscompile, 119nas�uchiwanie

zdarze�, 34–36zmian atrybutów, 34–36

nawiasy klamrowe, 135nazwa

serwletu, 26tabeli, 46

nazwy JNDI, 71NetBeans, 168

Oobiekt

Application, 142AsyncListener, 38BeanManager, 99Connection, 147EntityManagerFactory, 60HttpHeaders, 142InvocationContext, 89jaxbObject, 132MessageDrivenContext, 70messageProducer, 149Providers, 142QueueBrowser, 151Request, 142RequestDispatcher, 30Response, 130SecurityContext, 142ServletContext, 29session, 148TemporaryQueue, 153UriInfo, 142UserTransaction, 90ValueChangeListener, 117

obiektydo��czane po stronie serwera, 115nas�uchuj�ce, 33, 36obs�uguj�ce logiczne, 131, 133obs�uguj�ce protoko�u, 131obs�uguj�ce SOAP, 133

POJO, 12przechwytuj�ce, 21, 88, 90tymczasowe miejsc docelowych, 153

obserwator, observer, 95obserwatory transakcyjne, 97obs�uga

buforowania, 60metod protoko�u HTTP, 20negocjacji rodzaju tre�ci, 20operacji asynchronicznych, 37powi�zania XML, 120technologii Ajax, 21, 110, 112zasi�gów, 23zasobów, 105, 110zdarze� cyklu �ycia, 23��da� GET, 114��da� protoko�u HTTP, 27��da� wielocz��ciowych, 44

odbieranie komunikatuasynchroniczne, 152synchroniczne, 150

odwo�anie do zasobu, 105odwzorowania WSDL-Java, 127odwzorowywanie

danych, 120niestandardowej reprezentacji, 140typów j�zyka, 122wyj�tków, 143

ograniczeniabezpiecze�stwa, 41niestandardowe, 22, 158wbudowane, 154

oprogramowanie po�rednicz�ceMOM, 144

otrzymywanie komunikatów, 148

Ppakiet javax.validation.constraints, 154pakiet zgodno�ci technologicznej, 15pakowanie zasobów, 43pami� podr�czna, 61platforma Java EE 6, 168plik

beans.xml, 86, 90ejb-jar.xml, 70faces-config.xml, 21, 118

Page 33: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Skorowidz � 179

JAR, 39JSESSIONID, 29jsf.js, 110library.jar, 43login. xhtml, 107persistence.xml, 51, 57, 165validation.xml, 22web.xml, 28web-fragment.xml, 20, 39, 40

pliki.war, 29, 70.xhtml, 105cookie, 29

podmiot zabezpiecze�, securityprincipal, 75

POJO, Plain Old Java Object, 12pola nag�ówka, 146powtarzalne adresy URL, 21producenci zdarze�, 95profile, 13protokó�

SOAP, 20, 119zatwierdzania dwufazowego, 72

przeno�ne rozszerzenie, portableextensions, 97

przepisywanie adresów URL, 30przetwarzanie

asynchroniczne, 37, 74wspó�bie�ne, 67

przycinanie, pruning, 13punkt wstrzykiwania delegacji, 91punkty

ko�cowe, 121, 125ko�cowe dynamiczne, 124rozszerze�, 115wstrzykiwania, 83, 85

Rregu�y

bezpiecze�stwa, 42nawigacji, 118nawigacji warunkowe, 118odwzorowa�, 120

relacje pomi�dzy encjami, 48REST, 134, 140RI, Reference Implementation, 15

rola manager, 41rozszerzenie, 98rozszerzony kontekst utrwalania, 52

SSEI, Service Endpoint Interface, 121serwer

GlassFish, 168GlassFish Community, 18

serwletAccountServlet, 28FileUploadServlet, 45

serwlety, 14, 20, 26serwlety asynchroniczne, 20singletonowy komponent sesyjny, 66specyfikacja, 15

Bean Validation, 56CDI, 82, 88EJB 3.1, 81EJB.Lite, 81JAX-WS, 120JSR 224, 119JSR 303, 154JSR 311, 134JSR 314, 100JSR 315, 26JSR 316, 15JSR 317, 46JSR 318, 62JSR 914, 144WS-I Attachments Profile, 120WS-I Basic Profile, 120WS-I Simple SOAP Binding

Profile, 120WS-Reliable Messaging, 120WS-Secure Conversation, 120WS-Security, 120

specyfikacjeserwletów, 14technologii internetowych, 170technologii korporacyjnych, 170

SPI, Service Provider Interface, 97sprawdzanie poprawno�ci, 116,

162–166encji, 58komponentów, 22

Page 34: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

180 � Skorowidz

stanowy komponent sesyjny, 62stereotyp @Decorator, 91stereotypy, 94stos technologii, 17stosowanie strony, 106strona szablonu, 104struktura typu Map, 49

��cie�ka do zasobów, 43�ledzenie sesji, 30�rodowisko

IDE NetBeans, 168JAX-WS, 119

TTCK, Technology Compliance Kit, 15technologia

Ajax, 110Bean Validation, 154CDI, 97JavaServer Faces, 100JAXB, 120JAX-RS, 13, 20, 134JAX-WS, 13, 119JMS, 68, 144

technologieinternetowe, 15, 170korporacyjne, 16, 170us�ug sieciowych, 16, 171zarz�dzania i zabezpiecze�, 17, 171

transakcje, 58, 71zarz�dzane przez komponent, 71zarz�dzane przez kontener, 71

trybdostarczania komunikatów, 149potwierdzania otrzymywania

komunikatów, 148tworzenie

liczników czasu, 78stereotypów, 95

typ void, 74, 123typy, 48typy MIME, 140

UUEL, Unified Expression Language, 82unikanie powtórze�, 54us�uga Timer Service, 77us�ugi sieciowe, 18, 119, 171us�ugi sieciowe RESTful, 134usuwanie encji, 56uwierzytelnianie, 42

Wwalidator, 116warstwa

prezentacji, 22transakcyjna, 22

warto�ciadnotacji @TransactionAttribute,

73validation-mode, 165

wi�zaniemetod, 137obiektów z sesj�, 30��dania z zasobem, 141

w�a�ciwo�ciActivationConfig, 69BindingProvider, 128

w�a�ciwo�javax.persiste

nce.cache.storeMode, 61javax.persistence.cache.�retrieveMode, 61

WSDL, Web Services DescriptionLanguage, 119

wstrzykiwaniekomponentu, 24, 102obiektu, 87zale�no�ci, 14, 22, 82

wyj�tek, 143ConstraintViolationException, 57org.example.MyException, 44SOAPFaultException, 123ValidatorException, 116

wyra�enia JPQL, 54wysy�anie wiadomo�ci, 147wywo�ania zwrotne cyklu �ycia, 25

Page 35: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

Skorowidz � 181

wzorzecarchitektury, 94fabryki, 87

XXSS, cross-site scripting, 29

Zzabezpieczenia serwletów, 20zagadnienia przecinaj�ce, 88zalety komponentów z�o�onych, 109zapytania dynamiczne, 54zarz�dzanie instancjami encji, 50zasada jednego rozwi�zania, 14zasi�g

@ApplicationScoped, 93@ConversationScoped, 93@Dependent, 93@RequestScoped, 93@SessionScoped, 93

zasi�gi CDI, 93zbiór definicji ogranicze�, 22zdarzenie, 95

AfterBeanDiscovery, 98AfterDeploymentValidation, 98BeforeBeanDiscovery, 98BeforeShutdown, 98ProcessAnnotatedType, 98ProcessInjectionTarget, 98ProcessProducer, 98

znacznik, Patrz elementznaczniki faceletów, 101, 103

��dania

blokuj�ce, 130multipart/form-data, 44protoko�u HTTP, 27

��danieDELETE, 138GET, 27, 113HEAD, 138, 139OPTIONS, 139POST, 28PUT, 138

Page 36: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE

182 � Skorowidz

Page 38: Tytuł oryginału: Java EE 6 Pocket GuideSpis treci 5 Spis treci Sowo wstpne 9 1. Java Platform, Enterprise Edition 12 Wprowadzenie 12 Elementy skadowe 15 Co nowego w wersji Java EE