Web Frameworks Java Server Faces. Petr Aubrecht CA



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

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

KIV/PIA 2013 Jan Tichava

X33EJA. JSF aplikace

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

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

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

Web frameworks v praxi

Technology Entry form Entry up-to-date? Internal links Faulty internal Possible internal links

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

Web frameworks v praxi Tomáš Krátký

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

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

Tvorba informačních systémů

PA165: Úvod do Java EE. Petr Adámek

X33EJA. JSF aplikace

Tvorba informačních systémů

2012 ET NETERA a.s. Wicket přehled technologie Martin Strejc

Platformy / technologie. Jaroslav Žáček

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

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

PLATFORMY / TECHNOLOGIE JAROSLAV ŽÁČEK

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

KIV/PIA Semestrální práce

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

Spring framework 2.0. Roman Pichlík CZJUG

(Enterprise) JavaBeans. Lekce 7

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

DUM 14 téma: Interakce s uživatelem

X33EJA Enterprise Java

Semináˇr Java X J2EE Semináˇr Java X p.1/23

GWT pro pokročilé. MoroSystems, s.r.o. Pavel Klobása. Senior Java Developer.

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

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

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

Komponentově orientované webové frameworky. Jiří Stránský twitter.com/jistr

Tvorba WWW stránek. přehled technologií používaných na webu principy jednotlivých technologií a možnosti jejich vzájemného kombinování

Tvorba informačních systémů

Web Services na SOAP

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

Technologie Java. Jaroslav Žáček

Tvorba informačních systémů

MVVM pro desktop i web

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

Platformy / technologie. Jaroslav Žáček

Formy komunikace s knihovnami

programátor vs. vývojář

UJO Framework. revoluční architektura beans. verze

Stručný úvod pro programátory. Michal Kuchta

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

Systémová administrace portálu Liferay

Databázové a informační systémy

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

VÝVOJ INTERNETOVÝCH APLIKACÍ - VIA

Softwarové komponenty a Internet

Michal Augustýn Microsoft Most Valuable Professional

Škola: Gymnázium, Brno, Slovanské náměstí 7 III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Název projektu: Inovace výuky na GSN

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

Tvorba informačních systémů

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

Formuláře. Internetové publikování

Tvorba informačních systémů na platformě J2EE Petr Hetmánek Masarykova Univerzita, Fakulta Informatiky, Botanická 68a, Brno

UNIVERZITA PARDUBICE

Server-side technologie pro webové aplikace

Multiplatformní osobní organizér v jazyce Java

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Enterprise Java Beans 3.0

Převod LN aplikace do xpages

Formuláře. Internetové publikování. Formuláře - příklad

Elektronická podpora výuky předmětu Komprese dat

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

PROJEKT ININ, 1 ČÁST 1 ORACLE APEX. Martin Šimeček (kruh 258), prosinec 08

Tvorba informačních systémů

Session Beans. Petr Aubrecht CA. Vtipy budou tentokrát o krizi:

Aplikační rámce Jakarta Struts Framework

SPECIFIKACE PŘEDMĚTU PLNĚNÍ

KAPITOLA 3. Architektura aplikací na frameworku Rails. V této kapitole: modely, pohledy, řadiče.

Vývoj multiplatformní aplikace v Qt

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

Snadný vývoj webových aplikací s Nette. Lukáš Jelínek

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

Novinky ve Visual Studio Tomáš Kroupa

Co je nového v Java EE 6

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

03 - Základy editace dynamických stránek

Technologie Java. Jaroslav Žáček

WPA - Konfigurace Java EE aplikace (Maven, struktura war arch. kontejnerem Tomcat 8

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo

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

Oracle XML DB. Tomáš Nykodým

Vytvoření pokročilé Fotogalerie v Drupalu - Views

MBI - technologická realizace modelu

PHP Best Practices. Please try to fit your code to 80 columns. That's decimal 80. A. Morton

X36WWW. Technologie aplikačních serverů. Miroslav Bureš,, Martin Klíma. X36WWW: 12. přednáška 1

Statická analýza kódu - za kód bez chyb

Další vlastnosti Springu Moduly Springu. Spring Framework. Pavel Mička. Pavel Mička Spring Framework 1/18

Proč Angular JS framework?

Převod 4GL aplikací do webového prostředí. Ing. Jan Musil, IBM ČR Community of Practice for

WEBOVÉ APLIKAČNÍ RÁMCE

}w!"#$%&'()+,-./012345<ya

Transkript:

Web Frameworks Java Server Faces Petr Aubrecht CA

XKCD o SQL Injection http://www.abclinuxu.cz/clanky/komiks-xkcd-327-maminciny-exploity Její dcera se jmenuje Pomoc, jsem zavřená v továrně na řidičáky.

Co dnes probereme -AJAX rulez!!! -Web frameworks proč, za kolik a které -JSF -důvody -backing bean -navigace -atd. atd.

Vždyť už všechno umíte -Víte, jak se připojit do databáze. - Víte, kam dát business logic. - Víte, jak data prezentovat. -Co ještě byste chtěli vědět? client/web browser AJAX presentation layer/jsp business logic layer/ejb data layer/jpa db Jak udělat ten web jednoduše! Třeba jako SWING nakreslit, naklikat a spustit.

Proč webové frameworky - Servlety nás odstínily od HTTP. - JSP nás odstínilo od servletů (starost o stream). -Jak se oprostit od starosti o formuláře a jejich ukládání, repopulaci při opravě, validaci, hlášení chyb? -Jak zvládnout ty cool aplikace, co po nás šéfové chtějí? -Kolik lidí tady zná dobře Javascript, aby napsal něco a la Google Apps? -AJAX sice rulez, ale je to STRAŠLIVĚ obtížné!

Příklad JSF - http://primefaces.org/themes.html

Struts -Nejslavnější (protože první široce přijatý) frameworkem se staly Struts. Nabídly backing beanu, kterou samy naplnily hodnotami z formuláře (podle shodných jmen fieldů/atributů), nabídly validaci (dost nízkoúrovňovou) a navigaci. -Bylo potřeba ke každému formuláři psát backing beanu, což vedlo k poměrně mnoha třídám.

Google Web Toolkit -Existují dva velmi slavné frameworky, o kterých si nebudeme vyprávět, ale zmínka by měla padnout. -Google Web Toolkit je založen na nápadu napsat logiku v Javě. Obsahuje kompilátor, který klientskou část přeloží do JavaScriptu. Není založen na HTML, ale UI se vytváří pomocí programu (podobně jako Swing). -GWT má vyřešenou komunikaci browser <-> server, podporuje asynchronní zprávy. -Právě specializovaný překladač (převzatý z Eclipse) ztěžuje automatický překlad (např. night build).

Spring Framework -Rod Johnson při psaní knihy o J2EE (2.1) uváděl mnoho příkladů, jak usnadnit programování v J2EE. Nakonec měl tolik materiálu, že ho zpracoval jako framework. Ten byl velice úspěšný a získal velkou popularitu. Hlavním cílem byla náhrada EJB. -Spring Framework se poměrně rychle rozrostl z náhrady EJB na celý stack technologií a konkuruje dnes i JSF. -Výhodou je, že jde o knihovny, takže pro deployment vystačíme s Tomcatem, není třeba JEE kontejner. -Má lepší vlastnosti, ale není standardem. Tedy existuje jediná implementace (co když se Rod rozhodne dát se na malování?).

Stripes, Velocity, Struts2 a další -Webových frameworků se vyrojil nespočet, ale výrobci nástrojů neměli možnost soustředit se na jeden. Zkusím vyjmenovat několik open source: -Tapestry, Struts 2, Wicket, Cocoon, Turbine, Makumba, Maverick, Echo, Rife, DWR, Stripes, SiteMesh a další -V poslední době přišly i z příbuzných oblastí -Ruby on Rails, Grails, OpenLaszlo, Flex a další -Sun přišel s JSR 127 s návrhem na standardizaci. Velcí hráči hrají nejraději s velkými hráči.

Čistě javascriptové knihovny -Existují i knihovny čistě javascriptové (např. Yahoo toolkit). -Dají se použít i pro JEE aplikace, ale je to netypické. -Je potřeba zařídít zpracování událostí, a generování stránek ve formě vyžadované knihovnou. -Nemají vazbu do Javy, jsou obecné a nezávislé na jazyku na serveru. - Zde uvádím pouze pro úplnost.

Myšlenky za JSF - pokrytí oblastí zpracované jinými frameworky -automatické ukládání dat z formulářů -repopulace formulářů -validace -zpracování chyb -navigace -šablony -tagování (koho z vás napadlo, že Javový kód v JSP je špatně? v JSF 2.0 lze vypnout) - konkurovat nejen frameworkům, ale i.netu! - podpora nástrojů (IDE)!

Praktický příklad -Co všechno je potřeba nastavit. -Jak vypadá kód.

Web.xml - záznam ve web.xml <servlet> <servlet name>faces Servlet</servlet name> <servlet class>javax.faces.webapp.facesservlet</servletclass> <load on startup>1</load on startup> </servlet> <servlet mapping> <servlet name>faces Servlet</servlet name> <url pattern>/faces/*</url pattern> </servlet mapping>

Struktura stránky - struktura stránky <%@page contenttype="text/html"%> <%@page pageencoding="utf 8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <f:view> <html> <head> <meta... <title... </head>... <h:form id="nsdform"> <h:messages />... </h:form> </body> </html> </f:view>

Konfigurace backing bean - konfigurace backing beans ve faces-config.xml <faces config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/xmlschema instance" <managed bean> <managed bean name>carback</managed bean name> xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/webfacesconfig_1_2.xsd"> <managed bean class>cz.eja.back.carback</managed beanclass> <managed bean scope>session</managed bean scope> </managed bean>

EL (Expression Language) - R/W property binding - method call <h:form id="nsdform"> <h:inputtext id="num1id" value="#{primeback.num1}" validator="#{primeback.validatenum}"/> <h:commandbutton action="#{primeback.calc}" value="calc NSD" /> </h:form>

Formulář a Backing Bean <h:inputtext id="num1id" value="#{primeback.num1}"/> public void setnum1(string x) public String getnum1() <h:commandbutton action="#{primeback.calc}" value="calc NSD" /> public String calc() <h:commandbutton type="submit" actionlistener="#{primeback.calc}" value="calc NSD" /> public void calc(actionevent event) - nesouvisí s navigací, pouze se zavolá metoda calc

Validace <h:inputtext id="num1id" value="#{primeback.num1}" validator="#{primeback.validatenum}"/> public void validatenum(facescontext context, UIComponent component, Object value)... throws ValidatorException { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Unable to convert to number!"));... throw new ValidatorException(new FacesMessage("Number must be >0"));

Zobrazení zpráv/chyb <h:messages /> - zobrazí všechny zprávy <h:inputtext id="num1id".../> <h:message for="num1id" style="color: red" /> - zobrazí zprávu pro danou komponentu

Navigace backing bean -navigace v kódu, u metody, která obsluhuje submit, vrací string, který určuje výstup -string se vyhledá v konfiguraci -null znamená žádný přesun, aplikace zůstává na té samé stránce public String calc() {... if(!ok) return null; return "success"; }

Navigace - faces-config.xml -konfigurace navigace ve faces-config.xml (viz také Page Flow záložka v NB) <navigation rule> <from view id>/prime/chooseprime.jsp</from view id> <navigation case> <from outcome>success</from outcome> <to view id>/prime/nsdresult.jsp</to view id> <redirect /> </navigation case> </navigation rule>

Lokalizace (1) - ve faces-config.xml <application> <locale config> <default locale>en</default locale> <supported locale>en</supported locale> <supported locale>cs</supported locale> <supported locale>cs_cz</supported locale> </locale config> <message bundle>messages</message bundle> </application> -ve stránce <f:loadbundle basename="messages" var="bundle" /> <h:outputtext value="#{bundle.enter}" />

Lokalizace (2) - src/messages_en.properties enter: Enter two numbers\: - src/messages_cs.properties enter: Zadej dv ě čísla\: -Pozor, property file musí být v kódování Latin1, musí se použít kód (naštěstí NB začaly podporovat automatickou konverzi)

Lists and Tables - viz příklady <h:selectonelistbox id="selectcarlist" value="#{carback.selectedcar}"> <f:selectitems value="#{carback.selectcars}" /> - musí dostat seznam SelectItem - <h:datatable id="cartable" value="#{carback.cars}" var="rowcar"> - <h:column> - <f:facet name="header"> - <h:outputtext value="spz"/> - </f:facet> - <h:outputtext value="#{rowcar.spz}"/> - </h:column> - stačí seznam a popis sloupce; jak dostanu seznam linků?

Table and Model -abychom udělali tabulku s linky, musíme mít možnost získat informaci, ke kterému objektu se link váže. To nám zařídí model. -Java -DataModel carsmodel = null; -carsmodel = new ListDataModel(getCars()); -selectedcar = (Auto)carsModel.getRowData(); -JSF -<h:commandlink action="#{carback.showcardetail}"> - <h:outputtext value="#{rowcar.spz}"/> -</h:commandlink>

Lifecycle - comments

Lifecycle exceptions

Komponenty - provázání, definice jedné komponenty

Seznam standardních komponent - Button - Checkbox - Checkbox List - Component Label - Data Table - Dropdown List - Faces Form - Formatted Output - Grid Panel - Group Panel - Hidden Field - Hyperlink - Image - Inline Message - Link Action - Listbox - Message List - Multi Line Text Area - Multi Select Listbox - Output Text - Radio Button List - Secret Field - Text Field

Knihovny -Nad JSF se dají snadno budovat knihovny widgetů. Takovýchto knihoven se opět vyrojil bezpočet. Nejslavnější jsou richfaces (JBoss) a myfaces (Apache), ale vlastní má i Oracle, icefaces, ajax4jsf... -Většinou se jedná o celé soubory UI komponent, nad kterými se dá postavit aplikace. -Některé knihovny pouze rozšiřují stávající komponenty o AJAX chování. - Zkuste v Googlu jsf components.

Richfaces - http://www.jboss.org/file-access/default/members/jbossrichf - podle mě nejhezčí komponenty <rich:calendar id="date" value="#{bean.datetest}"> <a4j:support event="ondateselected" rerender="maintable"/> </rich:calendar>

MyFaces -Mají šikovnou vlastnost, kdy normální HTML tagy jsou doplněny o JSF renderery. Designer tedy normálně navrhne stránky, kterým programátor pouze přidá atribut, čím se budou renderovat. Soubor se tedy zobrazí staticky jako normální HTML stránka, ale dynamicky ji JSF nakreslí ve své režii.

Co dál -lepší integrace EJB a web. interface SEAM (opět Gevin King) -co možná největší nahrazení backing bean anotacemi -v EJB 3.1 bude jako WebBeans (JSR-299) -vyčistit chyby v návrhu facelety -JSF trpí některými neduhy, které řeší nová knihovna, která je s JSF 100 % kompatibilní, pouze dělá některé akce v jiném pořadí -známý je problém s vytvářením komponent, kdy při prvním spuštění stránky dojde k chybě, ale při druhém je vše v pořádku.

Links - http://java.sun.com/javaee/5/docs/tutorial/doc/bnaph.html JSF v JEE tutorialu - http://jsfcentral.com - http://www.coreservlets.com/jsf-tutorial/ - https://facelets.dev.java.net/nonav/docs/dev/docbook.html - http://www.netbeans.org/kb/docs/web/quickstart-facelets-in- - http://www.icefaces.org/main/resources/tutorials.iface - http://facesmatrix.net

Závěr - Nejlepší cesta (když teď chápete základy) -projděte si nějaký tutoriál -zkuste si svoji vlastní aplikaci -Hodně úspěchů ve vytváření graficky přitažlivých a funkčně bohatých aplikací!