Your SlideShare is downloading. ×
0
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
AdvancedJSF
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

AdvancedJSF

6,650

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,650
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Advanced JavaServer Faces Matthias Weßendorf | matzew@apache.org
  • 2. Matthias Weßendorf
    • Oracle Corp.
      • ADFv team (ADF Faces)
    • Apache Software Foundation
      • Apache MyFaces (Trinidad | Core)
      • Apache Shale
    • Autor
      • Java- & Eclipse-Magazin
      • Bücher zu Struts, J2ME&WebServices
    • Speaker
      • Oracle Open World
      • JavaOne
      • JAX, W-JAX
      • ApacheCon
  • 3. Advanced JSF - ToC
    • JSF – Hintergrund
    • JSF – Überblick JSF - Frameworks
    • Die Framework Auswahl
    • Framework Details
    • Integration
    • Code-Beispiele
  • 4. JSF – Background
    • Zum Anfgang mit Servlets ...
    • ... und JSPs ...
    • ... und „Model 2“ Web frameworks
      • Apache Struts
      • Action-basiert
    • ... und JSTL!
    • Viele „Model 2“ Frameworks ...
      • (fast) kein Komponenten-Ansatz (UI Framework)
        • UI Tags mit JSTL
    • JavaServer Faces
      • Ein Standard für Java Web Apps
  • 5. JSF – Details
    • Java Standard des JCP
      • Leichtgewichtiges Web-Framework
      • API für UI Komponenten
    • Spezifikationen:
      • JSR 127  JSF 1.1 (Mai 2004)
      • JSR 252  JSF 1.2 [Java EE 5] (Mai 2006)
      • JSR 314  JSF 2.0 [Java EE 6] (2008 ?)
    • Ziele
      • Vereinfachte Java-Web-Entwicklung
      • Tooling (Jdev, Sun / Netbeans, Eclipse, ...)
    • Implementierungen
      • Apache MyFaces
      • RI (Sun)
  • 6. JSF –Frameworks
    • Echt ? Ein Standard ?
    • JA ! ! !
    • Aber...
    • Viele Optionen:
      • View-Layer (JSP, Facelets, Shale-Clay, Tiles, ...)
      • Dialog (Spring, Shale, Oracle ADFc)
      • JSF-Frameworks (Seam / Web Beans)
      • Custom JSF Lifecycle... (Mabon, ADF Faces)
      • Komponenten (many, many ...)
  • 7. Frameworks...
    • Apache MyFaces Tomahawk
    Apache MyFaces Sun RI IceFaces Oracle ADF Faces Apache MyFaces Tobago Apache MyFaces Trinidad Facelets Seam JSR 299 / Web Beans Rich Client Faces Jenia Yahoo UI 4 JSF  http://www.jsfmatrix.net 
  • 8. Houston, we have a problem !
  • 9. JSF Frameworks
    • Was man wirklich braucht :
    • JSF – Runtime:
      • Apache MyFaces
      • Sun RI
    • View-Layer:
      • JSP / JSPX (default)
      • Facelets
      • Apache Shale Clay
    • Komponenten:
      • Standard Komponenten
        • Sehr einfache Komponenten
      • Oft braucht man mehr...
  • 10. Frameworks
    • Mehr nicht ?
    • Für „VIEW“, ja...
    • Was braucht der Business-Layer ?
      • EJB 2.x
      • EJB 3.x
      • Spring
      • Spring + JPA
      • ORM (Toplink, Hibernate)
      • JDBC / Spring + JDBC
      • Datenbank...
  • 11. Frameworks
    • Die Auswahl:
      • Apache MyFaces (runtime)
      • Facelets (view-layer)
      • Trinidad (JSF-Komponenten Bibliothek)
        • The mother of PPR 
      • Spring + JPA + Derby/HSQL
        • JPA = Java Persistence API:
          • Apache OpenJPA
          • Oracle‘s Toplink (Eclipse Link)
          • Apache Cayenne
          • ...
      • MyFaces Orchestra (ViewController + conversation scope)
  • 12. Die Architektur JSF View DAO / Repository JSF Bean Service Spring Beans Java Persistence API Oracle 11g View Controller XHTML Seiten Faces Apache MyFaces Orchestra
  • 13. Details der Frameworks
  • 14. Apache MyFaces
    • Erste OpenSource JSF Implementierung
      • Bietet JSF 1.1 und JSF 1.2 (in 2007)
      • Notes on the TCK ...
    • Seit 2005 ein Apache Projekt
      • Vorher: LGPL / Sourceforge
    • Größte JSF „user community“
    • Viele Unterprojekte
      • Tobago
      • Tomahawk
      • Trinidad
      • Orchestra
      • Fortsetzung folgt 
  • 15. Facelets
    • Alternative JSF-View-Technik
      • JSP(X) ist „old school“
    • Leichtgewichtiges Templating Framwork
      • XHTML-basierte Templates
      • Designer-freundlich
      • DEMO...
    • Performance
    • JSF 1.2 auch ohne JavaEE 5 Container
    • Einfache Komponenten Entwicklung!
      • JavaServer Faces - Version 2.x
      • DEMO...
    • Similar to Tapestry...
  • 16. Facelets
    • Hinzufügen des ViewHandler
      • Mit Trinidad/IceFaces => web.xml
      • Im Standard, Tomahawk, ... => faces-cfg
    • Hinzufügen der JARs
      • Unified EL (javax.el) => el-api, el-imp
      • facelets.jar
    • Benötigt Java 5
  • 17. Einfaches Facelet
    • <!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;>
    • <html
    • xmlns=&quot;http://www.w3.org/1999/xhtml
    • xmlns:h=&quot;http://java.sun.com/jsf/html &quot;>
    • <body> <input type=&quot;text&quot; jsfc=&quot; h:inputText „ value=&quot;#{bean.property}&quot; />
    • </body>
    • </html>
  • 18. Shale – Clay-Plugin
    • Temaplating Framework für JSF
      • Alternative zu Facelets und JSP(X)
      • gewöhnliche HTML Datei als Template
    • Tiles-ähnlicher als Facelets
    • Mehr XML files, als Facelets
      • Configuration overhead ?!
      • web.xml
        • 3 Context-param Einträge
      • clay-config.xml
        • Für Clay Komponenten
      • clay-views-config.xmk
        • Seiten, die auf der/den Komponenten basieren
  • 19. Apache MyFaces Trinidad
    • Unterprojekt von Apache MyFaces
    • Über 100 JSF Komponenten
    • Verschiedene Framework „goodies“
      • Test-Framework
      • Maven Plugins
      • Skinning (CSS basiert) (DEMO)
      • Dialog-Support (DEMO)
      • Ajax-API (DEMO)
        • Client-seitig (JavaScript)
        • Server-seitig (Java)
    • Stabile JSF Komponenten Bibliothek
      • JSF 1.1 und 1.2 Unterstützung
    • „ Spende“ von Oracle (2006) (ADF Faces)
  • 20. Apache MyFaces Trinidad
    • Demonstration von verschiedenen JSF Komponenten
    • Trinidad Demo online:
    • http://www.irian.at
  • 21. Spring Framework
    • Bekanntes OpenSource Framework
      • Apache 2.0 License
    • „ Hilfe“ für Java EE (J2EE)
      • Macht EJB / J2EE einfacher!
      • POJOs sind „first class citizens“
      • Hat Java EE 5 bereichert
    • Viele „goodies“ (AOP, Transaction, DI, JDBC, ...)
    • Integration für etliche Frameworks und Techniken
      • JSF, Struts, EJB, Hibernate, AspectJ,...
  • 22. Java Persistence API
    • Standard für Java Persistenz
      • Wichtiger Teil der EJB3 Spec. (JSR 220)
        • Nutzung auch ohne EJB-Container möglich
      • RI => Toplink Essentials (Glassfish)
      • Lessons learned (Toplink, Hibernate, JDO)
    • Vereinfacht EJB (2.x und 1.x)
    • Java5 Annotations (oder XML...)
    • ORM-Frameworks (mit JPA Support):
      • Eclipse Link (Oracle Toplink)
      • Hibernate (JBoss)
      • OpenJPA & Cayenne (Apache)
  • 23. Java Persistence API
    • @Entity
    • public class Customer
    • {
    • @Id
    • @GeneratedValue (strategy= GenerationType. AUTO )
    • private Long id ;
  • 24. Java Persistence API
    • @Temporal (value = TemporalType. DATE ) private Date birthday ;
    • @OneToOne (cascade= CascadeType. ALL ) private Address address ;
  • 25. Spring und JPA
    • Nutzung von JPA ohne EJB-Container
      • JPA-Nutzung als ORM-Framework
    • Support für folgende JPA Implementierungen:
      • JPA-Vendor-Adapter
        • Hibernate
        • OpenJPA (Apache)
        • Toplink
    • JPA Template
      • Nur für die Migration zu JPA angedacht!
    • Direkte Benutzung des PersistenceContext
      • AbstractEntityManagerFactoryBean
  • 26. Spring und JPA
    • EntityManagerFactory in Spring-Context
      • Konfiguration als JNDI / Spring-Bean
    • Transaktionen-Support
      • JPA-TransactionManager
      • JTA-TransactionManager
    • DAO / Repositroy
      • Implementierung des Interfaces kennt JPA
      • @PersistenceUnit
      • @PersistenceContext
    • Einheitliches Exception-Handling
      • Spring‘s DataAccessException
      • @Repository
  • 27. Spring und JPA (Config)
    • <bean id=&quot;entityManagerFactory&quot; class=&quot; org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean &quot;
    • p:dataSource-ref=&quot;dataSource&quot;
    • p:persistenceUnitName=&quot;kickstart&quot; >
    • <property name=&quot;jpaVendorAdapter&quot;>
    • <bean class=&quot;org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter&quot;>
    • <property name=&quot;showSql&quot; value=&quot;true&quot;/>
    • <property name=&quot;generateDdl&quot; value=&quot;true&quot;/>
    • </bean>
    • </property>
    • <!– Kopie von OPENJPA-40 -->
    • <property name=&quot;loadTimeWeaver&quot;>
    • <bean class=&quot;net.wessendorf.wjax.openjpa.OpenJpaLoadTimeWeaver&quot;/>
    • </property>
    • </bean>
  • 28. Spring und JPA (Config)
    • <bean id=&quot;transactionManager&quot; class=&quot;org.springframework.orm.jpa.JpaTransactionManager&quot;
    • p:entityManagerFactory-ref=&quot;entityManagerFactory&quot;
    • />
    • <bean class=„
    • org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor
    • &quot;/>
    • <bean class=„
    • org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor
    • &quot;/>
  • 29. Spring und JPA (DAO)
    • @Repository
    • @Transactional (propagation = Propagation. SUPPORTS )
    • public class JpaCustomerDaoImpl implements CustomerDao
    • {
    • private final String QUERY_ALL = &quot;select c from Customer c&quot; ;
    • private final String QUERY_BY_SECONDNAME = &quot;select c from Customer c where c.secondname LIKE :param&quot; ;
    • private EntityManager em ;
    • @PersistenceContext
    • public void setEntityManager(EntityManager entityManager)
    • {
    • this . em = entityManager;
    • }
    • ...
  • 30. Spring und JPA (DAO)
    • public void remove(Customer customer)
    • {
    • Customer toDel = findById(customer.getId());
    • em .remove(toDel);
    • }
    • public List queryBySecondname(String name)
    • {
    • Query q = em .createQuery( QUERY_BY_SECONDNAME );
    • q.setParameter( &quot;param&quot; , name+ &quot;%&quot; );
    • return q.getResultList();
    • }
  • 31. Services mit Spring
    • Implementieren Geschäftslogik
      • Interface
      • Implementierung
    • Greifen auf DAO / Repository zu
    • Bereitstellung von Transaktionsregeln
      • Auf Methoden-Ebene
    • Client kennt nur Service-Interfaces
      • JSF-Managed-Bean
  • 32. Services mit Spring
    • private CustomerDao customerDao ;
    • public void setCustomerDao(CustomerDao customerDao)
    • {
    • this . customerDao = customerDao;
    • }
    • @Transactional(propagation = Propagation.REQUIRED)
    • public void removeCustomer(Customer customer)
    • {
    • customerDao .remove(customer);
    • }
  • 33. Spring: Service und DAO
    • Konfiguration:
    • < bean class = „
    • com.sessions.myfaces.daos. JpaCustomerDaoImpl &quot; id = &quot; customerDao &quot; />
    • < bean class = „
    • com.sessions.myfaces.services. CustomerServiceImpl &quot; id = &quot;customerService„
    • p:customerDao-ref = &quot;customerDao&quot; />
  • 34. MyFaces Orchestra
    • Einfaches Applikations State Management
      • Conversation-Scope (dialog / wizard)
    • Bessere Integration von View- und Persistenz Layer
      • Conversation-Scope persistance contexts
    • JSF-Extension
      • MyFaces-IMPL unabhängig
      • Kern unabhängig von JSF API...
        • Kein anderes Framework (derzeit!)
    • JSF‘s „Managed Bean Facility“ ersetzt durch Spring‘s IoC Container
      • Mit Spring 2.0
    • ViewController
  • 35. Session Application Conversation Flash Request Conversation Scopes
  • 36. Conversation-Scope persistance contexts
  • 37.
    • Gewöhnliches Muster
      • Bean name ähnlich wie View-Id (JSF)
      • form.xhtml  form
      • users/form.xhtml  usersForm
    • Services
      • initView (nach RESTORE_VIEW )
      • preProcess (vor INVOKE_APPLICATION )
      • preRender (vor PRE_RENDER )
    • Orchestra bietet Annotations
    • Ebenfalls bekannt in:
      • JDeveloper + ADFc
      • Apache Shale
    ViewController
  • 38. Team-Bildung!
  • 39. Generale Konfiguration
    • Verschiedene XML Dateien...
      • Servlet Container (web.xml)
        • Alle Frameworks...
      • Faces (faces-config.xml)
      • Spring XML Datei(en)
      • Trinidad:
        • trinidad-config.xml
        • trinidad-skin.xml
      • Facelets:
        • (custom) taglib...
  • 40. Wichtige Konfiguration
    • JSF
      • FacesServlet (web.xml)
    • Facelets
      • ViewHandler (web.xml wg. Trinidad)
      • javax.faces.DEFAULT_SUFFIX (web.xml)
    • Trinidad
      • RenderKit (faces-config.xml)
      • TrinidadFilter (web.xml)
      • ResourceServlet (web.xml)
    • Orchestra
      • Verschiedene Dinge (spring-xml(s) & web.xml)
    • Spring
      • RequestContextListener (web.xml)
      • ContextLoaderListener (web.xml)
      • DelegatingVariableResolver (faces-config.xml)
  • 41. JSF Managed Bean‘s
    • Nutzung von Spring 2
      • Bietet Scopes (request / session)
    • Konfiguration:
    • < faces-config >
    • < application >
    • < variable-resolver >
    • org.springframework.web.jsf.DelegatingVariableResolver
    • </ variable-resolver >
    • </ application >
    • ...
  • 42. JSF Managed Bean‘s
    • Einfache Bean Klasse:
    • public class FooController
    • {
    • private CustomerService customerService ;
    • public CustomerService getCustomerService()
    • {
    • return customerService ;
    • }
    • public void setCustomerService(CustomerService customerService)
    • {
    • this . customerService = customerService;
    • }
    • ...
    • }
  • 43. JSF Managed Bean‘s
    • Konfiguration (in Spring !):
      • Spring hat viele Feature...
      • Für Orchestra ein MUSS!
    • Keine Beans in faces-config.xml
    • < bean
    • id = &quot;create„ class = „....FooController„ scope = &quot;request&quot;
    • p:userService-ref = &quot; userServiceImpl “ / >
  • 44. Faces Servlet Mapping
    • http://server:8080/app/page.faces
    • Mit Facelets
      • „ Open Source“
        • http://server:8080/app/page.xhtml
    • Servlet-Mapping:
    • < servlet-mapping >
    • < servlet-name > faces </ servlet-name >
    • < url-pattern > *.xhtml </ url-pattern >
    • </ servlet-mapping >
    • http://server:8080/app/page.xhtml
  • 45. Let‘s code!
    • Praktische Anwendung der verschiedenen Frameworks
  • 46. Facelets
    • Template Engine, XHTML basiert
      • Layout mit CSS
      • Bestimmen von Bereichen
        • (content, footer, ...)
    • <tr:document
    • xmlns:ui=&quot;http://java.sun.com/jsf/facelets&quot;
    • xmlns:tr=&quot;http://myfaces.apache.org/trinidad&quot;
    • ...>
    • ...
    • <div class=„content&quot;>
    • <ui:insert name=&quot;content&quot;>My default Content</ui:insert>
    • </div>
    • ...</tr:document>
  • 47. Facelets
    • Template Client
      • Gewöhnliche Webseite
    • <ui:composition xmlns=&quot;http://www.w3.org/1999/xhtml&quot;
    • xmlns:tr=&quot;http://myfaces.apache.org/trinidad&quot;
    • xmlns:mw=&quot;http://wessendorf.net/kickstart&quot;
    • ...
    • template=&quot;WEB-INF/facelets/layout/template.xhtml&quot; >
    • <!-- content -->
    • <ui:define name=&quot;content&quot;>
    • Mein JSF-Content !!!
    • </ui:define>
    • </ui:composition>
  • 48. Facelets
    • JSF ist nicht „DRY“ ?
    • <h:dataTable ...>
    • ...
    • <h:colum>
    • <f:facet name=„header“>
    • <h:outputText value=„Name“ />
    • </f:facet>
    • <h:outputText value=„#{bean.name}“ />
    • </column>
    • ...
    • <h:colum>
    • <f:facet name=„header“>
    • <h:outputText value=„some other value“ />
    • </f:facet>
    • <h:outputText value=„#{bean.foo}“ />
    • </column>
    • ...
    • </h:dataTable>
  • 49. Facelets
    • Das wäre doch nett !
    • <h:dataTable ...>
    • ...
    • <x:smartColumn header=„Name“ value=„#{bean.name}“/>
    • <x:smartColumn header=„ some other value“ value=„#{bean.foo}“/>
    • ...
    • </h:dataTable
    • ... aber...
  • 50. Facelets
    • Komponenten-Entwicklung aufwändig
      • Java:
        • UIComponent (JavaBean)
        • Renderer (Erzeugt das HTML)
        • Tag-Klasse (Verbindet Comp. mit Renderer)
      • XML
        • Faces-config.xml (Registrieren von Type)
        • TLD Datei (Registrieren des Tags)
  • 51. Facelets
    • Mit Facelets...
      • einfache Entwicklung von Komponenten
    • „ Rendering“ via XHTML Datei
    • Kein! Java-Code notwendig
    • Lediglich:
      • XHTML Datei
      • Facelet‘s Taglib XML Datei
      • Taglib in web.xml registrieren
  • 52. Facelets
    • Meine JSF Komponente:
    • <tr:column
    • xmlns:ui=&quot;http://java.sun.com/jsf/facelets&quot;
    • xmlns:f=&quot;http://java.sun.com/jsf/core&quot;
    • xmlns:tr=&quot;http://myfaces.apache.org/trinidad &quot;>
    • <f:facet name=&quot;header&quot;>
    • <tr:outputText value=&quot;#{header}&quot; />
    • </f:facet>
    • <tr:outputText value=&quot;#{value}&quot; />
    • </tr:column>
  • 53. Facelets
    • Die Taglib.xml:
    • <facelet-taglib>
    • <namespace>http://corp.com/smart</namespace>
    • <tag>
    • <tag-name>smartColumn</tag-name>
    • <source>facelets/components/column.xhtml</source>
    • </tag>
    • </facelet-taglib>
    • Registration in web.xml:
    • <context-param>
    • <param-name>facelets.LIBRARIES</param-name>
    • <param-value>/WEB-INF/mw.taglib.xml</param-value>
    • </context-param>
  • 54. Facelets
    • Benutzung:
      • Namespace hinzufügen:
      • <tr:document
      • xmlns:ui=&quot;http://java.sun.com/jsf/facelets&quot;
      • xmlns:x=&quot; http://corp.com/smart&quot;
      • xmlns:f=&quot;http://java.sun.com/jsf/core&quot;>
      • Nutzung in XHTML-Datei:
    • <x:smartColumn header=„Name“ value=„#{bean.name}“/>
  • 55. Trinidad
    • Bietet Ajax (aka PPR)
      • Erstellt „vor“ Ajax...
      • XHR + IFrame (für Uploads)
      • Komponenten beinhalten Ajax:
        • autoSubmit
        • partialSubmit
        • partialTriggers
    • Ajax-API
      • server
      • client
    • Dialog-Framework
    • CSS Skinning
  • 56. Trinidad
    • PPR in Action
    • <tr:selectOneRadio value=&quot;#{partialBean.selectOne}&quot; autoSubmit=&quot;true&quot; id=&quot;select1&quot; >
    • <tr:selectItem label=&quot;First&quot; value=&quot;Beer&quot;/>
    • <tr:selectItem label=&quot;Second&quot; value=&quot;more beer&quot;/>
    • <tr:selectItem label=&quot;Third&quot; value=&quot;sold out!&quot;/>
    • </tr:selectOneRadio>
    • <tr:outputText value=&quot;#{partialBean.selectOne}&quot;
    • partialTriggers=&quot;select1&quot; />
  • 57. Trinidad
    • Aufruf von JavaScript vom Server...
    • ExternalRenderKitService.addScript():
    • public String doTheWork()
    • {
    • ...
    • FacesContext context = FacesContext.getCurrentInstance();
    • ExtendedRenderKitService erks =
    • Service.getRenderKitService(context,
    • ExtendedRenderKitService.class);
    • erks.addScript(context,
    • &quot;hello();&quot;);  JS-function
    • return (&quot;success&quot;);
    • }
  • 58. Trinidad
    • Client-side API
      • Senden von PPR request
        • TrPage.sendPartialFormPost(...)
      • Senden von Ajax request
        • TrRequestQueue.sendRequest(...)
    • Monitoring von PPR/Ajax Requests
      • StatusIndicator component
      • JS API
  • 59. Trinidad: Monitoring PPR
    • function addListener()
    • {
    • var requestQueue = TrPage.getInstance().getRequestQueue();
    • requestQueue.addStateChangeListener(myCallback);
    • }
    • function myCallback(state)
    • {
    • var busy = state == TrRequestQueue.STATE_BUSY;
    • var div = document.getElementById(&quot;load&quot;);
    • div.style.display = busy ? &quot;inline&quot; : &quot;none&quot;;
    • }
    • In XHTML:
    • <tr:commandLink onclick=&quot;addListener(); &quot; ...>
  • 60. Trinidad
    • Dialog Framework
      • „ new Window“ oder lightweight Dialogs...
      • Navigation rules innerhalb des Dialog
      • <tr:commandLink text=&quot;Google Maps&quot; useWindow=&quot;true&quot; action=&quot;dialog:map&quot; returnListener=&quot;#{bean.returnListener}&quot; />
    • CSS Skinning
      • Erstellen von trinidad-skins.xml
      • „ skin-family“ in trinidad-config.xml eintragen
      • Programmieren einer CSS Datei
  • 61. Trinidad
    • CSS Skinning :
    • .AFRequiredIconStyle {
    • color: #CC0000;
    • -tr-rule-ref: selector(&quot;.AFDefaultFont:alias&quot;);
    • }
    • af|inputDate::launch-icon
    • {
    • content: url(/images/calendar_icon.gif);
    • }
  • 62. Orchestra - ViewController
    • Drei Möglichkeiten
      • Reflection (initView(),...)
      • Interface (Implementieren von ViewController )
      • Annotations (@ViewController, @InitView,...)
    • „ Multi-ViewController“
      • @ViewController(viewIds={&quot;/all.xhtml&quot;, ...)
  • 63. Orchestra - ViewController
    • Orchestra ViewController
    • @ConversationRequire(
    • conversationNames = &quot;editor&quot;,
    • entryPointViewIds = {&quot;/all.xhtml&quot;},
    • redirect=&quot;/all.xhtml&quot;)
    • @ViewController(viewIds={&quot;/edit1.xhtml&quot;, &quot;/edit2.xhtml&quot;})
    • public class Editor ...
    • {
    • ...
    • @PreRenderView public void loader()
    • {
    • ...
    • }
    • ...
    • }
  • 64. Orchestra - Scope
    • Manuel-Scope
    • <bean id=&quot; googleMapBean &quot; class=&quot;net.wessendorf.faces.starter.view.controller.GoogleMapBean&quot; scope=&quot;conversation.manual&quot;
    • orchestra:conversationName=&quot; googleMap &quot;
    • p:userService-ref=&quot;userServiceImpl&quot;>
    • <aop:scoped-proxy />
    • </bean>
    • Beenden der Konversation
    • Conversation currentConv = ConversationManager.getInstance().getConversation(&quot; googleMap &quot;);
    • currentConv.invalidate();
  • 65. Orchestra - Scopes
    • ConversationBindingListener Interface
      • valueBound()
      • valueUnbound()
    • Gilt für beide Scope‘s
      • Flash
      • manual
    • Conversation hat „timeout“
      • 30 Minuten
  • 66. Ausblick
    • JBoss Seam, „a Java EE framework“
      • JSF
      • EJB 3
    • Basis für „Web Beans“ (JSR 299)
      • Dependency-Injection...
      • Google Guice
    • Ein (web) Framework für Java EE
    • JavaServer Faces 2.0
      • Bessere Integration für Komponenten
        • Ajax-Layer ?
      • Aufnahme von guten Ideen
        • Facelets
        • Trinidad
        • ...
    • „ Modern Web Frameworks“ ... ?
  • 67. Dokumentation
    • http://myfaces.apache.org
    • http://myfaces.apache.org/trinidad
    • http://springframework.org
    • https://facelets.dev.jav.net
    • Schulung / Support:
      • Irian (http://www.irian.at)
      • MyFaces User / Dev List
    • Slides  http://slideshare.net/mwessendorf/
    • Demo-Anwendung:
      • http://code.google.com/p/facesgoodies/
  • 68.
    • Frage ?
    • Danke !

×