Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Podobné dokumenty
JavaServer Faces Zdeněk Troníček

X33EJA. JSF aplikace

KIV/PIA 2013 Jan Tichava

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Web Frameworks Java Server Faces. Petr Aubrecht CA

X33EJA. JSF aplikace

Fakulta elektrotechnická. Bc. Petr Halaška. Studijní program: Elektrotechnika a informatika, strukturovaný, Navazující magisterský

Platforma J2EE. Lukáš Zapletal liberix.cz. Platforma Java 2 Enterprise Edition vývoj webových aplikací

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

Navrhněte a implementujte webový portál pro milovníky čokolády. Proveďte analýzu současných řešení a zdůvodněte návrh vlastního řešení.

Tvorba informačních systémů

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Tvorba informačních systémů

Tvorba informačních systémů

Tvorba informačních systémů

KIV/PIA Semestrální práce

Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)

Michal Augustýn ALWIL Software Microsoft Most Valuable Professional

Převod LN aplikace do xpages

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Softwarové komponenty a Internet

Návrh sociální sítě se sportovní tématikou s využitím technologií Java Enterprise Edition

Oddělení webového a aplikačního serveru. Běží zde několik aplikací.

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

UJO Framework. revoluční architektura beans. verze

Spring portfolio. Tomáš Krátký

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Dynamické stránky v praxi. Bedřich Košata

Technologie JavaBeans

Systém pro odevzdávání studentských prací. Bc. Radek Malinský

Java Server-side. Štěpán Kuchař. VŠB-TUO FEI Katedra informatiky

Čipové karty Lekařská informatika

Nástroje a frameworky pro automatizovaný vývoj. Jaroslav Žáček jaroslav.zacek@osu.cz

Michal Augustýn Microsoft Most Valuable Professional

Spring framework 2.0. Roman Pichlík CZJUG

SG at CTU. 3sg.czacm.org. Cerny T., Chalupa V., Rychtecky L., Linhart T.

Co je nového v Java EE 6

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Abstraktní datové typy: zásobník

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Základy programování v jazyce JAVA

<Insert Picture Here> Vývoj portálových řešení v Javě

1. Distribuce Javy. 2. Vlastnosti J2EE aplikace. 3. Fyzická architektura J2EE aplikace. Distribuce Javy se liší podle jejího zamýšleného použití:

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Distribuované systémy a výpočty

Uspořádaný seznam nula nebo více elementů, každý je typem ASN.1 (heterogenní seznam) uspořádaný seznam stejných elementů

Personální IS nemocnice v ƒeské Líp. Petr Va²ák. ƒeské vysoké u ení technické v Praze Fakulta elektrotechnická. Diplomová práce

Framework pro návrh responzivního uživatelského rozhraní nové generace

Základy Guice Vazby Scopes. Google Guice. základní seznámení s frameworkem Google Guice

Jazyk C# a platforma.net

JAVA JavaBeans Java, letní semestr

Servlety a JSP. Petr Adámek, petr.adamek@ibacz.eu

Web Services na SOAP

JEE. Webové aplikace Servlety, JSP, JSF

Abstraktní datové typy

Web frameworks v praxi Tomáš Krátký

STARÁ DOBRÁ JAVA A PERSISTENCE S CACHÉ

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

Návrhové vzory pro J2EE

Aleš Rybák, Jiří Kadlec. Pluginy budoucnosti

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

DEVFEST ANGULAR 2 WORKSHOP. angular.cz

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

Enterprise Java Beans 3.0

Portál pro doučování

Tvorba informačních systémů

1. Struktura stránky, zásady při psaní kódu, MVC pattern. Web pro kodéry (Petr Kosnar, ČVUT, FJFI, KFE, PINF 2008)

X33EJA Enterprise Java

Car Agent. Struktura chování:

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Vybrané partie z jazyka Java Spring a Enterprise JavaBeans (EJB)

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Tvorba podnikových aplikací v jazyce JAVA. Josef Pavlíček KII PEF CZU

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Java Managenent Extension JMX

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

JAVA. Aspekty (AOP) AspectJ

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

Zabezpečení webové vrstvy a EJB projektu Část nastavení specifická pro Glassfish, část dána Java EE

OSGi. Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Návrhové vzory pro J2EE. Miroslav Beneš

ANGULAR 2 WORKSHOP. angular.cz

Internet cvičení. ZS 2009/10, Cvičení 3., Tomáš Pop. DISTRIBUTED SYSTEMS RESEARCH GROUP

GUI v Javě a událostmi řízené programování

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Úvod. Petr Aubrecht (CA) Martin Ptáček (Wincor Nixdorf) Je 10 typů lidí: ti, kteří znají binární kód, a ti, kteří ne.

Desktop GUI. IW5 - Programování v.net a C# Desktop GUI

JAVA JavaBeans Java, letní semestr 2018

Platformy / technologie. Jaroslav Žáček jaroslav.zacek@osu.cz

Aplikační rámce. Jakarta Struts Framework. Obsah přednášky. Aplikační rámce a knihovny. Co je to aplikační rámec? Enterprise Java Beans

GUI v Javě a událostmi řízené programování

Iterator & for cyklus

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Transkript:

Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV) Katedra softwarového inženýrství Fakulta informačních technologií ČVUT v Praze Letní semestr 2010/2011, přednáška č. 3 Zdeněk Troníček, 2011

Agenda Java Server Faces (JSF) Aplikace v JSF Zpracování žádosti, backing beans Navigace Šablony Konverze a validace Lokalizace Životní cyklus žádosti JSF komponenty 2

JSF 1.0 3

JSF aplikace Faces servlet web.xml faces-config.xml Facelets (*.xhtml) Backing Beans (*.java) model (*.java) libraries <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>first Application</title> </h:head> <h:body> Hello, #{user.name} </h:body> </html> expression language: #{...} 4

JSF Requests 5 initial request postback request <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> </h:head> <h:body> <h:form> <h:inputtext value="#{user.name}"/> <h:commandbutton value="send" action="#{user.store}"/> </h:form> </h:body> </html>

Backing bean @ManagedBean(name = "user") @RequestScoped public class UserBean { private String name; } public String getname() { return name; } public void setname(string name) { this.name = name; } public String store() { return "display"; } #{user.name} initial response: getter postback response: getter <h:inputtext value="#{user.name}"/> initial response: getter postback request: setter postback response: getter 6

Request processing <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> </h:head> <h:body> <h:form> <h:inputtext value="#{user.name}"/> <h:commandbutton value="send" action="#{user.store}"/> </h:form> </h:body> </html> Initial: UserBean.getName() Postback: UserBean.setName() UserBean.store() UserBean.getName() 7

Scope (doba života) Jaká je doba života backing beany? request po dobu zpracování požadavku view dokud jsme na dané stránce session po dobu sezení application po dobu běhu aplikace custom dobu života řídíme programově 8

Nastavení scope @RequestScoped @ViewScoped @SessionScoped @ApplicationScoped @NoneScoped @CustomScoped Flash scope @ManagedBean(name = "user") @SessionScoped public class UserManagedBean { } public UserManagedBean() { } 9

Navigace Kam se přejde po stisku tlačítka? Možnosti: 1. implicitní navigace 2. statická navigace 3. dynamická navigace 10

Implicitní navigace public class UserManagedBean { public String store() { if ( ) { return "home"; } return "next"; } } home.xhtml next.xhtml 11

Navigační pravidla <faces-config> <navigation-rule> <from-view-id>/first.xhtml</from-view-id> <navigation-case> <from-outcome>next</from-outcome> <to-view-id>/second.xhtml</to-view-id> </navigation-case> </navigation-rule>... </faces-config> first.xhtml "next" second.xhtml 12

Statická navigace <h:commandbutton value="send" action="next"/> first.xhtml "next" second.xhtml 13

Dynamická navigace <h:commandbutton value="send" action="#{user.store}"/> @ManagedBean(name = "user") public class UserManagedBean { public String store() { if ( ) { return "home"; } return "next"; } } "next" second.xhtml first.xhtml "home" home.xhtml 14

Šablony pro jednotný vzhled stránek top content 15

Template <h:body> <div id="top" class="top"> <ui:insert name="top">library</ui:insert> </div> <div id="content" class="content"> <ui:insert name="content">content</ui:insert> </div> </h:body> top content 16

Template client <ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" template="basictemplate.xhtml" xmlns:h="http://java.sun.com/jsf/html"> <ui:define name="content"> <h:form> Author: <h:inputtext value="#{searchbean.author}"/> Title: <h:inputtext value="#{searchbean.title}"/> <h:commandbutton value="search" action="#{searchbean.search}"/> </h:form> </ui:define> </ui:composition> 17

Konverze řetězec javovský objekt <h:inputtext value="#{dvd.year}" required="true"> <f:convertdatetime pattern="yyyy"/> </h:inputtext> BigDecimalConverter BigIntegerConverter BooleanConverter ByteConverter CharacterConverter DateTimeConverter DoubleConverter EnumConverter FloatConverter IntegerConverter LongConverter NumberConverter ShortConverter 18

Vlastní konvertor @FacesConverter( forclass = Phone.class ) public class PhoneConverter implements Converter { public Object getasobject( FacesContext fc, UIComponent comp, String value ) { // String Object (ConverterException) } } public String getasstring( FacesContext fc, UIComponent comp, Object value ) { // Object String (ConverterException) } 19

Validace form data validation business-logic validation <h:inputtext value="#{user.weight}"> <f:validatelongrange minimum="1" maximum="200"/> </h:inputtext> <f:validatedoublerange /> <f:validatelongrange /> <f:validatelength /> <f:validateregex pattern="\\d\\d\\d\\s+\\d\\d"/> <f:validaterequired /> <f:validatebean /> 20

Vlastní validátor @FacesValidator( "phonevalidator" ) public class PhoneValidator implements Validator { } public void validate( FacesContext fc, UIComponent comp, Object value ) throws ValidatorException {... } <h:inputtext value="#{user.phone}"> <f:validator validatorid="phonevalidator"/> </h:inputtext> 21

Bean validation @AssertFalse @AssertTrue @DecimalMax @DecimalMin @Digits @Future @Max @Min @NotNull @Null @Past @Pattern @Size @ManagedBean( name = "user" ) @RequestScoped public class UserManagedBean { } @Pattern( regexp = "[a-z]+@(fit fel).cvut.cz" ) private String email; 22

Lokalizace (soubor.properties) Jméno souboru: <name>{- _}language{- _}country{- _}variant.properties Obsah souboru: klíč = hodnota messages_en.properties username=username birth=birth phone=phone weight=weight messages_cs.properties username=uživatelské jméno birth=datum narození phone=telefon weight=hmotnost 23

Component tree Client side Server side UIViewRoot <f:view> Welcome to JSF! HtmlOutputText <h:outputtext> HtmlForm <h:form> HtmlInputText <h:inputtext> find HtmlCommandButton <h:commandbutton> 24

Životní cyklus žádosti postavení stromu Restore View vyčtení parametrů Apply Request Values konverze a validace Process Validations Render Response vytvoření odpovědi Invoke Application akce a navigace Update Model Values uložení hodnot 25

Initial request postavení stromu Restore View vyčtení parametrů Apply Request Values konverze a validace Process Validations Render Response vytvoření odpovědi Invoke Application akce a navigace Update Model Values uložení hodnot 26

Postback request postavení stromu Restore View vyčtení parametrů Apply Request Values konverze a validace Process Validations Render Response vytvoření odpovědi Invoke Application akce a navigace Update Model Values uložení hodnot 27

Events postavení stromu vyčtení parametrů konverze a validace Restore View Apply Request Values Process Events Process Validations Process Events Conversion/validation error Render Response Process Events Invoke Application Process Events Update Model Values vytvoření odpovědi akce a navigace uložení hodnot 28

Validation & conversion 29 <h:inputtext value="#{user.phone}"> <f:converter converterid="phoneconverter"/> <f:validator validatorid="phonevalidator"/> </h:inputtext> <h:inputtext value="#{addr.zipcode}"> <f:converter converterid="zipcodeconverter"/> <f:validator validatorid="zipcodevalidator"/> </h:inputtext> PhoneConverter: getasobject() ok PhoneValidator: validate() ok ZipCodeConverter: getasobject() ok ZipCodeValidator: validate() ok error error

Render response Invoke Application Invoke Application initial request Render Response Render Response navigace nový strom komponent bez navigace původní strom komponent 30

Property immediate (1) <h:commandlink immediate="true" /> <h:commandbutton immediate="true" /> ActionSource ActionEvent Restore View Apply Request Values doručena ActionEvent ActionListener DefaultActionListener Render Response 1.akce 2.navigace 31

Property immediate (2) <h:inputtext immediate="true" /> <h:selectbooleancheckbox immediate="true" /> Restore View konverze validace Apply Request Values EditableValueHolder: UIInput UISelectBoolean UISelectOne UISelectMany Process Validations 32

JSF komponenty Komponenta má tři části: 1. UIComponent součást stromu komponent 2. Tag použit ve stránce 3. Renderer generuje HTML Standardní komponenty Tag: inputtext, selectonelistbox, selectonemenu, selectoneradio, selectmanylistbox,... UIComponent: UIInput, UISelectOne, UISelectMany,... Renderer: Text, Secret, Listbox, Menu, Radio,... Př.: UIInput + Text = inputtext UISelectOne + Listbox = selectonelistbox 33

Knihovny komponent RichFaces, http://www.jboss.org/richfaces ICEFaces, http://www.icefaces.org 34

Otázky & odpovědi tronicek@fit.cvut.cz