Zastosowanie technologii Ajax w ramach technologii JavaServer Faces wg

Podobne dokumenty
Zastosowanie kaskadowych arkuszy stylów (CSS - Cascading Style Sheets) w technologii JavaServer Faces

Zastosowanie technologii Ajax w ramach technologii JavaServer Faces wg

Budowa aplikacji wielowarstwowych. Zastosowanie Kaskadowych arkuszy stylów (CSS)

Budowa aplikacji wielowarstwowych. Zastosowanie szablonów

Budowa aplikacji wielowarstwowych. Zastosowanie szablonów, tabel oraz plików typu properties

Złożone komponenty JSF wg

PROGRAMOWANIE. WNPiD UAM, Programowanie, inż. Piotr Jabłoński

Projektowanie i wdrażanie systemów informatycznych. Dodanie aplikacji klienta uruchamianej przez przeglądarkę kontynuacja projektu:

Wprowadzenie do technologii JavaServer Faces 2.2 na podstawie Wykład 2 Technologie internetowe

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

Budowa aplikacji wielowarstwowych. Zastosowanie technologii Ajax

Budowa aplikacji wielowarstwowych. Zastosowanie technologii Ajax

Dzięki arkuszom zewnętrznym uzyskujemy centralne sterowanie wyglądem serwisu. Zewnętrzny arkusz stylów to plik tekstowy z rozszerzeniem css.

Java Server Faces narzędzie do implementacji w wy prezentacji


Przykłady tworzenia aplikacji komponentowych w technologii JavaServer Faces 2.1 na podstawie

Kaskadowość stylów określa pierwszeństwo w oddziaływaniu na te same elementy strony różnych stylów.

plansoft.org Zmiany w Plansoft.org

Danuta ROZPŁOCH-NOWAKOWSKA Strona Moduł 4. Przykład 1. Przykład 2. HTML 4.01 Transitional).

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

Facelets ViewHandler

Podstawy technologii JavaServer Faces wg

Budowa aplikacji wielowarstwowych. Zastosowanie szablonów, tabel oraz plików typu properties

za pomocą: definiujemy:

Young Programmer: HTML+PHP. Dr inż. Małgorzata Janik, Zajęcia #2

Wielowarstwowa aplikacja internetowa. Wykonanie widoku typu tabela. Pliki typu properties. wg

LABORATORIUM 2 WSTĘP DO SIECI TELEINFORMATYCZNYCH

Zastosowanie słuchaczy zdarzeń wg

Przykłady pytań do zaliczenia programu wykonywanego w ramach zajęć laboratoryjnych 6-8 z Programowania komponentowego w Javie. Zofia Kruczkiewicz

CSS - layout strony internetowej

Kaskadowe arkusze stylów (CSS)

Źródła. cript/1.5/reference/ Ruby on Rails: AJAX: ssays/archives/

Przedmiot: Grafika komputerowa i projektowanie stron WWW

Podstawy technologii JavaServer Faces wg

I. Dlaczego standardy kodowania mailingów są istotne?

Wykład 5_2 Arkusze stylów dziedziczenie. Technologie internetowe Zofia Kruczkiewicz

Zdefiniowane style mogą określać układ treści na stronie i sposób jej formatowania np. kolor czcionki, pogrubienia, tło tabel, rysunków itp.

Responsywne strony WWW

Znaczniki języka HTML

Podstawy technologi JavaServer Faces

Tworzenie Stron Internetowych. odcinek 6

Ćwiczenia laboratoryjne nr 8 Podstawy języka XML.

Dokument hipertekstowy

Programowanie komponentowe 5

używane skróty: HTTP - protokół do transferu tekstu, hipertekstu, zbiorów binarnych URL - jednolity lokalizator zasobów

HTML (HyperText Markup Language) hipertekstowy język znaczników

Podstawy (X)HTML i CSS

Projektowanie aplikacji internetowych. CSS w akcji

Dokumentacja Skryptu Mapy ver.1.1

Elementarz HTML i CSS

Technologie Informacyjne

Aplikacje internetowe

Mailingi HTML. Specyfikacja techniczna

rk HTML 4 a 5 różnice

Aplikacje WWW - laboratorium

Nazwa implementacji: CSS i box model. Autor: Opis implementacji: Poznajemy podstawy CSS oraz dowiadujemy się o rozmieszczaniu elementów na stronie.

Budowa prostej aplikacji wielowarstwowej

REFERAT O PRACY DYPLOMOWEJ

WYKŁAD 2 KASKADOWE ARKUSZE STYLÓW CSS CZĘŚĆ 1

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Podstawowe informacje o technologii Java Persistence API - przykład

Sierpień 2015 rozwiązanie plik: index.htlm

XHTML Budowa strony WWW

Programowanie internetowe

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Budowa dokumentu HTML 5

W ogólności znaczniki mogą również posiadać atrybuty które pozwalają wpływać i manipulować własnościami znaczników lub przenosić dodatkowe informacje:

JavaServer Faces (JSF)

CSS. Kaskadowe Arkusze Stylów

Specyfikacja techniczna dot. mailingów HTML

Ćwiczenie 9 - CSS i wstawianie CSS

DOM (Document Object Model)

Witryny i aplikacje internetowe

Oczywiście występują także znaczniki, bez ich odpowiednika kończącego, np. <BR>

Laboratorium 1: Szablon strony w HTML5

Poznań Java User Group Java Server Faces. Wprowadzenie (Fakty i Mity)

Przewodnik użytkownika (instrukcja) AutoMagicTest

Format HTML. Wybrane działy Informatyki Stosowanej. Definicja i przeznaczenie Struktura dokumentu Znaczniki Formularze i komponenty

Tworzenie Stron Internetowych. odcinek 6

Aplikacje WWW - laboratorium

WYMAGANIA EDUKACYJNE. Witryny i Aplikacje Internetowe klasa I

I. Formatowanie tekstu i wygląd strony

Podstawy HTML i CSS. Wydział Matematyki, Informatyki i Ekonometrii Uniwersytet Zielonogórski

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

Podstawy JavaScript ćwiczenia

Zajęcia 4 - Wprowadzenie do Javascript

Java EE: JSF + EJB + JPA + CDI + BV

Laboratorium 6 Tworzenie bloga w Zend Framework

Bazy danych i strony WWW

HTML. HTML(ang. HyperTextMarkupLanguage, pol. hipertekstowy język znaczników) język wykorzystywany do tworzenia stron internetowych

Laboratorium 7 Blog: dodawanie i edycja wpisów

Programowanie wielowarstwowe i komponentowe

2. Prezentacja wizualna

Układy witryn internetowych

O stronach www, html itp..

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Dokument hipertekstowy

Transkrypt:

Zastosowanie technologii Ajax w ramach technologii JavaServer Faces wg https://docs.oracle.com/javaee/7/jeett.pdf http://www.coreservlets.com Technologie internetowe 7 Technologie internetowe 7, Zofia Kruczkiewicz 1

1. Wprowadzenie Ajax - Asynchronous JavaScript and XML Główne zalety: walidacja danych w czasie rzeczywistym, nie wymagająca ponownego załadowania formularza poprawa funkcjonalności stron internetowych takich jak podpowiedzi nazwy i hasła użytkownika częściowa aktualizacja strony, co poprawia wydajność aplikacji Technologie internetowe 7, Zofia Kruczkiewicz 2

Aktualizacja strony: tradycyjna i z wykorzystaniem Ajax Wysłanie żądania (HTTP Request) po naciśnięciu OK na stronie dodaj_produkt2.xhtml Serwer Wysłanie żądania JavaScript (XML HTTP Request) po naciśnięciu Cena brutto na stronie dodaj_produkt2.xhtml Wysłanie odpowiedzi XHTML w postaci nowej strony rezultat2.xhtml Serwer Wysłanie odpowiedzi XML w postaci aktualizacji pola z prawej strony przycisku Cena brutto na stronie dodaj_produkt2. 3 xhtml

2. Użycie Ajax z technologią JavaServer Faces Dwa sposoby 1. Dodanie kodu JavaScript do aplikacji 2. Użycie wbudowanej biblioteki Ajax (od Java EE 7 wbudowany w bibliotekę JavaScript jako część podstawowej biblioteki JSF) 2.1. Standardowe komponenty JSF (przyciski, etykiety, pola wejściowe) są powiązane z funkcjonalnością Ajax 2.2. Możliwość odwołania do kodu Ajax w kodzie komponentów typu Managed Bean 2.3 Rozszerzenie komponentów JSF z wykorzystaniem funkcjonalności Ajax - zastosowanie znacznika f:ajax 4

3. Drugi sposób Użycie Ajax w technologii JSF z wykorzystaniem biblioteki Ajax wbudowanej w bibliotekę JavaServer Faces Zastosowanie znacznika f:ajax w komponentach typu Facelets bez potrzeby dodania kodu i konfigurowania komponentów Za pomocą użycia metody jsf.ajax.request() biblioteki JavaScript API bezpośrednio w aplikacji Facelets odwołanie do metod Ajax, co umożliwia kontrolę zachowania komponentów Technologie internetowe 7, Zofia Kruczkiewicz 5

3.1. Zastosowanie znacznika f:ajax dodanie zachowania Ajax do komponentów wejściowych <h:inputtext value="#{bean.message}"> <f:ajax /> </h:inputtext> Technologie internetowe 7, Zofia Kruczkiewicz 6

Atrybuty znacznika f:ajax Nazwa Typ Opis disabled javax.el.valueexpression przekształca do typu Boolean event javax.el.valueexpression przekształca do typu String Wartość typu Boolean identyfikująca status znacznika. Wartość true oznacza brak renderowania zachowania Ajax, a false oznacza renderowanie zachowania Ajax. Domyślna wartość: false Wartość String identyfikuje typ zdarzenia Ajax. Powinna być wspierana przez komponent w przypadku specyfikacji zdarzenia. W przeciwnym wypadku zdarzenie domyślne jest określone przez komponent : 1) action dla javax.faces.component.actionsource (np commandbutton) 2) valuechange dla javax.faces.component.editablevalueholder 7 (np. inputtext)

Atrybuty znacznika f:ajax (cd) Nazwa Typ Opis execute javax.el.valueexpression przekształca do typu Object imediate javax.el.valueexpression przekształca do typu Boolean listener Typ Collection, który identyfikuje listę komponentów działających na serwerze w postaci identyfikatorów komponentów typu String (ich atrybut id) lib słowa kluczowe (slajd 10). Domyślna wartość to @this. Wartość typu Boolean identyfikująca czy wejścia powinny być przetwarzane wcześniej w cyklu przetwarzania JSF. Wartość true oznacza przetwarzanie zdarzeń podczas fazy Apply Request Values, w przeciwnym wypadku podczas fazy Invoke Application javax.el.methodexpression Nazwa słuchacza, który jest wywołany, kiedy javax.faces.event.ajaxbehaviorevent jest przekazany do słuchacza zdarzeń

Atrybuty znacznika f:ajax (cd) Nazwa Typ Opis onevent javax.el.valueexpression przekształca do typu String onerror render javax.el.valueexpression przekształca do typu String javax.el.valueexpression przekształca do typu Object Nazwa funkcji JavaScript, która obsługuje zdarzenia UI Nazwa funkcji JavaScript, która obsługuje błędy Ajax Typ Collection, który zawiera listę komponentów renderowanych po stronie przeglądarki. Zawiera listę identyfikatorów komponentów (ich atrybuty id) o ograniczonej pamięci i/lub słowo kluczowe (slad 10). Jeśli ValueExpression jest wyspecyfikowane, należy powiązać ten atrybut z właściwością komponentu typu Managed Bean, który zwraca instancję typu Collection z elementami typu String, w przeciwnym wypadku jest wartością @none. 9

Słowa kluczowe dotyczące działania i renderowania atrybutów znacznika f:ajax Słowo kluczowe @all @form @none @this Opis Identyfikatory wszystkich komponentów Formularz zawierający komponent Brak identyfikatora komponentu Element, który wywołuje żądanie Technologie internetowe 7, Zofia Kruczkiewicz 10

4. Wysłanie żądania Ajax 1) Użycie atrybutu event Możliwe wartości: click, keyup, mouseover, focus, blur. W przeciwnym wypadku zdarzenie domyślne jest określone przez komponent : a) action dla javax.faces.component.actionsource (np commandbutton) b) valuechange dla javax.faces.component.editablevalueholder (np. inputtext) Przykład: W przykładzie obsługiwane jest kliknięcie myszą. Wartość click jest obecnie domyślna nie ma konieczności jawnego specyfikowania: event="click" <h:commandbutton id="submit" value="submit"> <f:ajax event="click" /> </h:commandbutton> <h:outputtext id="result" value="#{usernumberbean.response}" />

2) Użycie atrybutu execute. Wysłanie żądania Ajax (cd) Może być równy identyfikatorowi komponentu (atrybut id komponentu) lub @all, @none, @this, @form. Uczestniczy we wszystkich fazach przetwarzania żądania oprócz fazy Render Response. Przykład: po kliknięciu myszą na przycisk wykonane jest działanie pola typu inputtext (i związane z nim walidacje, konwersje itp). <h:inputtext id="userno" title="type a number from 0 to 10:" value="#{usernumberbean.usernumber}">... </h:inputtext> <h:commandbutton id="submit" value="submit"> <f:ajax event="click" execute="userno" /> </h:commandbutton> 12

Wysłanie żądania Ajax (cd) 3) Użycie atrybutu listener przygotowanie odpowiedzi po stronie serwera na akcję Ajax tzn zawiera odwołanie do metody, która jest wykonana po stronie serwera jako odpowiedź na akcję Ajax po stronie przeglądarki. Metoda słuchacza zdarzeń javax.faces.event.ajaxbehaviorlistener.processajaxbehavior jest wywołana raz podczas fazy Invoke Application cyklu życia. Przykład: Zawsze, kiedy ulegnie zmiana ceny biletu lub liczba uczestników wycieczki (event="change" ), metoda calculatetotal przeliczy koszt całkowity i wyświetli w komponencie o id="total" <f:ajax event="change" render="total" listener="#{reservationbean.calculatetotal}"/> Technologie internetowe 7, Zofia Kruczkiewicz 13

Wysłanie żądania Ajax (cd) 4) Użycie atrybutu immediate określa, czy dane przesłane do serwera powinny być przetwarzane wcześniej w cyklu przetwarzania, czy też później. Jeśli atrybut ma wartość true, zdarzenia generowane prze stronę, są przetwarzane i przesłane z powrotem podczas fazy Apply Request Values, w przeciwnym wypadku podczas fazy Invoke Application. Domyślną wartością jest false. Technologie internetowe 7, Zofia Kruczkiewicz 14

5. Monitorowanie zdarzeń po stronie klienta (przeglądarka) Właściwości onevent typu Data Object do monitorowania żądań Ajax Właściwość responsexml responsetext responsecode source status type Opis Odpowiedź dla Ajax w formacie XML Odpowiedź dla Ajax w formacie tekstowym Odpowiedź dla Ajax w formacie numerycznym Źródło bieżącego zdarzenia Ajax: DOM ( Document Object Model ) element Status bieżącego wywołania Ajax: begin, complete lub success Typ wywołania Ajax: event Przykład: monitorevent jest funkcją JavaScript, która monitoruje żądania Ajax i ich rozwój, wysłane przez zdarzenie click. JSF wywołuje tę metodę i wstawia daną typu Data Object do wywołanej funkcji na każdym etapie żądania Ajax: begin, complete i success. Właściwości tych obiektów podano w tabeli. <f:ajax event="click" render="statusmessage" onevent="monitormyajaxevent"/> 15

Wartość emptyresponse Opis 6. Obsługa błędów Wartością atrybutu onerror jest nazwa funkcji JavaScript. W przypadku wystąpienia błędu Ajax, JSF wywołuje funkcję JavaScript i przekazuje data object, który zawiera wszystkie właściwości jak dla atrybutu onevent i dodatkowe właściwości: description errorname errormessage. Wartości błędów typu Data Object dla właściwości status httperror malformedxml servererror Brak odpowiedzi Ajax z serwera Jedna z poprawnych błędów HTTP: request.status==null or request.status==undefined or request.status<200 or request.status>=300. Odpowiedź Ajax nie jest poprawna Odpowiedź Ajax zawiera błędy <f:ajax event="click" render="errormessage" onerror="handlemyajaxerror"/>

7. Otrzymanie odpowiedzi Ajax częściowe renderowanie strony <h:commandbutton id="submit" value="submit"> <f:ajax execute="userno" render="result" /> </h:commandbutton> <h:outputtext id="result" value="#{usernumberbean.response}" /> Atrybut render określa, który fragment strony należy zaktualizować. Wartością atrybutu render może być jeden lub wiele identyfikatorów id komponentów lub jedna z wartości: @this, @all, @none, @form lub wyrażenie typu EL. Dzięki tym wartościom atrybutu render wyznacza się fragmenty strony wysłane do aktualizacji po stronie przeglądarki Technologie internetowe 7, Zofia Kruczkiewicz 17

8. Cykl życia obsługi żądania Ajax Żądanie Ajax różni się od żądań JSF. Obsługiwane jest za pomocą javax.faces.context.partialviewcontext. Metoda processpartial obiektu PartialViewContext wykorzystuje informację do częściowego przetwarzania drzewa komponentów i ich renderowania. 1) Atrybut execute określa, jaki fragment drzewa komponentów powinien być przetwarzany. Jest to realizowane za pomocą metody visittree obiektu typu UIComponent class. 2) Podobnie używany jest atrybut render, który pozwala wyszukać właściwy komponent w drzewie komponentów (na podstawie id tego komponentu) oraz jego dzieci. Te wyszukane komponenty są renderowane wraz z zagnieżdżonymi komponentami ( dziećmi ) i wysłane jako odpowiedź. Wtedy nastąpi aktualizacja widoku. 18

9. Grupowanie komponentów związanych z Ajax <f:ajax event="click" render="@all"> <h:form> <h:inputtext id="input1" value="#{user.name}"/> <h:commandbutton id="submit"/> </h:form> </f:ajax> <f:ajax event="click" render="@all">... <h:commandbutton id="submit"> <f:ajax event="mouseover"/> </h:commandbutton>... </f:ajax> W tym przypadku należy renderować wszystkie elementy UI zagnieżdżone w znaczniku f:ajax podczas zdarzenia "click, generowanym w dowolnym zagnieżdżonym komponencie. Dodatkowo, zdarzenie "mouseover" przesłania zdarzenie "click" w komponencie h:commandbutton: oba typy zdarzeń (click, mouseover) tego komponentu uruchamiają akcję Ajax, czyli renderowanie wszystkich komponentów 19

10*. Ładowanie JavaScript jako zasobu 1. Ładowanie plików typu jsf.js (zasób JavaScript zawarty w technologii JavaServer Faces w bibliotece javax.facces) automatycznie przekazywany do przeglądarki klienta w znaczniku <h:ajax> 2. Sposoby przesyłania plików typu js bezpośrednio do komponentu: 2.1. h:outputscript 2.2. przez użycie adnotacji javax.faces.application.resourcedependency w klasie Javy typu UIComponent 20łŁ

10.1* Wykorzystanie JavaScript Api w aplikacjach typu Facelets (1) Przykład 1 <h:form> <h:outputscript name="jsf.js" library="javax.faces" target="head"/> </h:form> Renderowanie elementu strony HTML typu head wg skryptu jsf.js Przykład 2 <h:form> <h:outputscript name="jsf.js" library="javax.faces" target="head"> <h:inputtext id="inputname" value="#{userbean.name}"/> <h:outputtext id="outputname" value="#{userbean.name}"/> <h:commandbutton id="submit" value="submit" onclick="jsf.ajax.request(this, event, {execute: 'inputname', render:'outputname'}); return false;" /> </h:outputscript> </h:form> Technologie internetowe 7, Zofia Kruczkiewicz Źródło (DOM) zdarzenie opcjonalne opcje 21

Wartość Opis 10.1*. Wykorzystanie JavaScript Api w aplikacjach typu Facelets (2) execute Lista identyfikatorów komponentów lub jeden ze słów kluczowych(@all, @form, @none, @this), określających jakie komponenty powinny być przetwarzane podczas fazy Execute render Lista identyfikatorów elementów strony lub jeden ze słów kluczowych (@all, @form, @none, @this). Te identyfikatory wskazują na komponenty, które są przetwarzane w czasie fazy renderowania strony onevent Wartość typu String, oznaczająca nazwę funkcji JavaScript do obsługi zdarzenia onerror params Wartość typu String, oznaczająca nazwę funkcji do obsługi błędu Wstawienie dodatkowych parametrow do polecenia request

10.2*. Wykorzystanie JavaScript Api w aplikacjach typu Facelets (3) Wykorzystanie adnotacji javax.faces.application.resourcedependency w celu załadowania biblioteki typu jsf.js po stronie serwera i możliwości wykorzystania metody jsf.ajax.request w klasie typu Managed Bean. Ta metoda jest wykorzystana w przypadku tworzenia własnego komponentu lub własnego sposobu renderowania komponentu. Przykład Prezentacja ładowania zasobu typu JavaScript do klasy typu Managed Bean. @ResourceDependency(name="jsf.js" library="javax.faces" target="head") 23

Arkusze stylów CSS (Cascading Style Sheets) http://www.w3.org/tr/css3-selectors/ http://courses.coreservlets.com/course- Materials/pdf/jsf/jsf2/JSF2-CSS-Overview.pdf Technologie internetowe 7, Zofia Kruczkiewicz 24

1. Kaskadowe arkusze stylów CSS Kaskadowe arkusze stylów pozwalają projektantowi: kontrolować wygląd dokumentu oddzielić tę kontrolę od języka HTML, czyli od struktury dokumentu łączyć w sposób uporządkowany sekwencję informacji na temat stylu z wielu źródeł stąd kaskadowe arkusze stylówwg kolejności priorytetów (najwyższy priorytet ma sposób 1): włączane arkusze stylów (w elementach HTML jako atrybut) wewnętrzne arkusze stylów (w bloku znacznika <head>) zewnętrzne arkusze stylów domyślny arkusz użytkownika przeglądarki (p.3 - zależny od autora strony) domyślne style przeglądarki (niezależny od autora strony)

2. Ładowanie zewnętrznych arkuszy stylów 2.1. Standardowy HTML Ładowanie zewnętrznego arkusza stylów <head> <link href="css/styles.css" </head> rel="stylesheet" type="text/css"/> Lokalizacja zewnętrznego arkusza stylów Znajduje się w normalnym katalogu wskazanym za pomocą względnej ścieżki URL. Wartość css jest podkatalogiem bieżącego katalogu Technologie internetowe 7, Zofia Kruczkiewicz 26

2. Ładowanie zewnętrznych arkuszy stylów: 2.2. Specyfika JavaServer Faces Ładowanie zewnętrznego arkusza stylów <h:head> <h:outputstylesheet name="styles.css" library="css"/> </h:head> Lokalizacja zewnętrznego arkusza stylów Plik CSS znajduje się w podkatalogu wskazanym przez library, odniesionym do katalogu resources : /resources/css/styles.css Technologie internetowe 7, Zofia Kruczkiewicz 27

2. Ładowanie zewnętrznych arkuszy stylów: 2.3. Specyfika JavaServer Faces Ładowanie zewnętrznego arkusza stylów <h:head> <h:outputstylesheet name="css/styles.css" /> </h:head> Lokalizacja zewnętrznego arkusza stylów Plik CSS znajduje się w podkatalogu wskazanym przez name, odniesionym do katalogu resources : /resources/css/styles.css Technologie internetowe 7, Zofia Kruczkiewicz 28

3. Zagnieżdżanie stylów (HTML i JSF) wewnętrzne arkusze stylów - umieszczane w znaczniku head <head> <style type="text/css"> p { color: blue; }.note { font-weight: bold; background-color: red; } </style> </head> włączane arkusze stylów z wykorzystanie atrybutu style <h1 style="color: red; background-color: blue"> </h1> Technologie internetowe 7, Zofia Kruczkiewicz 29

4. Zastosowanie arkuszy stylów Style przypisane do elementów h2 { color: blue; font-family: sans-serif } Wszystkie elementy <h2> są niebieski i napisane czcionką sans:serif Style zdefiniowane jako.nazwa_stylu zastosowane z atrybutem class (HTML) lub styleclass (JSF).left_content { } background-color: #dddddd; padding: 5px; margin-left: 170px; height:150px; elementy HTML <p class="left_content"/> </p> JSF elements <h:outputtext styleclass="left_content" /> 30

4.1. Przykład definicji stylów body { } background-color: #ffffff; font-size: 12px; font-family: Verdana, "Verdana CE", Arial, "Arial CE", "Lucida Grande CE", lucida, "Helvetica CE", sans-serif; color: #000000; margin: 10px; #top { position: relative; background-color: #036fab; color: white; padding: 5px; margin: 0px 0px 10px 0px; } #left { float: left; background-color: #ece3a5; padding: 5px; width: 150px; }.left_content { background-color: #dddddd; padding: 5px; margin-left: 170px; height:150px; } 31

4.2. Przykład wykorzystania stylów <h:head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <h:outputstylesheet name="css/default.css"/> <h:outputstylesheet name="css/csslayout.css"/> <title> <ui:insert name="title"> Template</ui:insert> </title> </h:head> <h:body> <div id="top"> <h:panelgroup> <ui:insert name="top"></ui:insert> </h:panelgroup> </div> Technologie internetowe 7, Zofia Kruczkiewicz 32

<div> 4.3. Przykład wykorzystania stylów <div id="left"> <h:link outcome="/faces/warstwa_internetowa_jsf/dodaj_produkt2" value="dodaj produkt"/> <br/> <h:link outcome="/faces/warstwa_internetowa_jsf/lista_produktow" value="lista produktow"/><br/> </div> <div id="content" class="left_content"> <ui:insert name="content">content</ui:insert> </div> </div> Technologie internetowe 7, Zofia Kruczkiewicz 33

4.4. Przykład wykorzystania stylów <h:datatable id="items" captionstyle="font-weight:bold" columnclasses="list-column-center, list-column-left, list-column-right, list-column-center " footerclass="list-footer" headerclass="list-header" rowclasses="list-row-even, list-row-odd" styleclass="list-background" summary="#{bundle.shoppingcart}" value="#{cart.items}" border="1" var="item"> Atrybuty z przyrostkiem w nazwie: Classes, Class oznaczają nazwy stylów prezentacji elementów tabeli: kolumn, stopki, nagłówka, wierszy, tła Technologie internetowe 4, Zofia Kruczkiewicz 34

Selektor element #id 5. Podstawowe selektory https://www.w3.org/tr/css3-selectors/#selectors http://courses.coreservlets.com/course-materials/pdf/jsf/jsf2/jsf2-css-overview.pdf Przykład definicji selektora body{ } h1 {.} #bottom {..} #left { } #content{ } Przykład zastosowania selektora Użycie znaczników bez jawnego odwołania do stylu <div id="bottom"> <div id="left">.class.left_content {..} <div id="content" class="left_content"> element.class form.left_content{..} <form class="left_content"> element#id form#bottom{ } <form id="bottom"> * *{..} div *{..} Dotyczy wszystkich elementów na stronie Dotyczy wszystkich elementów zawartych w znaczniku div 35

5.1. Hierarchia selektorów Selektor Przykład definicji Znaczenie s1 s2 div.foo span.bar{ } Styl wszystkich elementów <span class="bar">, które mogą znajdować się wewnątrz <div class="foo"> s1>s2 div.foo > span.bar { } Styl wszystkich elementów <span class="bar">, które są zawarte wewnątrz <div class="foo"> s1, s2 ul,ol,dl.foo { } Oznacza definicję stylu wszystkich elementów ul, ol, dl, foo, <div class="foo"> s1+ s2 label + input { } Oznacza styl wszystkich elementów input znajdujących się za elementami label s1~s2 label ~ input { } Oznacza styl wszystkich elementów input, które mają element label znajdujący przed elementami input na tym samym poziomie zagnieżdżenia 36

5.2. Atrybuty selektorów Selektor Przykład definicji Znaczenie s[att] div.blah a[name] { } Styl wszystkich elementów <a name=" ">, które są wewnątrz <div class="blah"> s[att=val] a[href=#sect2] { } Oznacza styl wszystkich elementów <a href="#sect2"> s[att^=val] a[href^=#] { } s[att$=val] a[href$=jquery.com] {...} s[att*=val] a[href*=jquery.com] { } Oznacza styl wszystkich wewnętrznych linków Oznacza styl wszystkich linków do strony blah.jquery.com (bez podstron) Oznacza styl wszystkich linków do każdej strony, na stronie dostępnej z blah.jquery.com s[att!=val] a[href!=#sect2] { } Oznacza styl wszystkich linków oprócz linków <a href="#sect2"> s:not([.]) a:not([href^=http]) { } Oznacza styl wszystkich linków, które nie 37 zaczynają się od http

5.3. Selektory pozycyjne Selektor Przykład definicji Znaczenie s:first s:last ul.foo li:first { } Oznacza styl pierwszego elementu, który jest wewnątrz <ul class="foo"> s:eq(n) p:eq(3) { } Styl czwartego elementu p na stronie s:gt(n), s:lt(n) p:gt(3) { } Styl 5-tego i kolejnych elementów s:even s:odd s:first-child s:last-child s:only-child tr:even { } tr:first-child { } Znajduje wszystkie rowki tabeli, które mają numery parzyste Oznacza styl pierwszego elementu tabeli s:nth-child(n) tr:nth-child(3) { } Oznacza styl trzeciego rowka każdej tabeli s:nth-child(even) s:nth-child(odd) tr:nth-child(even) { } s:nth-child(xn+y) tr:nth-child(4n+2) { } Oznacza styl rowków własnej tabeli o numerach parzystych Oznacza styl rowków 6, 10, 14, każdej tabeli 38

5.4. Selektory filtrowania zawartości Selektor Przykład definicji Znaczenie s:contains (text).foo li:contains(wow) { } Oznacza styl elementów li, które mają tekst wow w tekście strony i znajdują się wewnątrz < class="foo"> s:empty div:empty { } Oznaczają styl pustych elementów div s:parent div:parent { } Styl niepustych elementów div s1:has(s2) table:has(th) { } Styl wszystkich tabel (table), które mają przynajmniej jeden element th Technologie internetowe 7, Zofia Kruczkiewicz 39