• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
AdvancedJSF
 

AdvancedJSF

on

  • 9,234 views

 

Statistics

Views

Total Views
9,234
Views on SlideShare
9,216
Embed Views
18

Actions

Likes
4
Downloads
0
Comments
0

2 Embeds 18

http://www.slideshare.net 15
http://www.3tools.de 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    AdvancedJSF AdvancedJSF Presentation Transcript

    • Advanced JavaServer Faces Matthias Weßendorf | matzew@apache.org
    • 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
    • Advanced JSF - ToC
      • JSF – Hintergrund
      • JSF – Überblick JSF - Frameworks
      • Die Framework Auswahl
      • Framework Details
      • Integration
      • Code-Beispiele
    • 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
    • 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)
    • 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 ...)
    • 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 
    • Houston, we have a problem !
    • 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...
    • 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...
    • 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)
    • Die Architektur JSF View DAO / Repository JSF Bean Service Spring Beans Java Persistence API Oracle 11g View Controller XHTML Seiten Faces Apache MyFaces Orchestra
    • Details der Frameworks
    • 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 
    • 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...
    • 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
    • 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>
    • 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
    • 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)
    • Apache MyFaces Trinidad
      • Demonstration von verschiedenen JSF Komponenten
      • Trinidad Demo online:
      • http://www.irian.at
    • 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,...
    • 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)
    • Java Persistence API
      • @Entity
      • public class Customer
      • {
      • @Id
      • @GeneratedValue (strategy= GenerationType. AUTO )
      • private Long id ;
    • Java Persistence API
      • @Temporal (value = TemporalType. DATE ) private Date birthday ;
      • @OneToOne (cascade= CascadeType. ALL ) private Address address ;
    • 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
    • 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
    • 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>
    • 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;/>
    • 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;
      • }
      • ...
    • 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();
      • }
    • 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
    • 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);
      • }
    • 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; />
    • 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
    • Session Application Conversation Flash Request Conversation Scopes
    • Conversation-Scope persistance contexts
      • 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
    • Team-Bildung!
    • 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...
    • 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)
    • 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 >
      • ...
    • 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;
      • }
      • ...
      • }
    • 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 “ / >
    • 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
    • Let‘s code!
      • Praktische Anwendung der verschiedenen Frameworks
    • 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>
    • 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>
    • 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>
    • 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...
    • 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)
    • 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
    • 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>
    • 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>
    • 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}“/>
    • 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
    • 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; />
    • 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;);
      • }
    • 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
    • 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; ...>
    • 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
    • Trinidad
      • CSS Skinning :
      • .AFRequiredIconStyle {
      • color: #CC0000;
      • -tr-rule-ref: selector(&quot;.AFDefaultFont:alias&quot;);
      • }
      • af|inputDate::launch-icon
      • {
      • content: url(/images/calendar_icon.gif);
      • }
    • Orchestra - ViewController
      • Drei Möglichkeiten
        • Reflection (initView(),...)
        • Interface (Implementieren von ViewController )
        • Annotations (@ViewController, @InitView,...)
      • „ Multi-ViewController“
        • @ViewController(viewIds={&quot;/all.xhtml&quot;, ...)
    • 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()
      • {
      • ...
      • }
      • ...
      • }
    • 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();
    • Orchestra - Scopes
      • ConversationBindingListener Interface
        • valueBound()
        • valueUnbound()
      • Gilt für beide Scope‘s
        • Flash
        • manual
      • Conversation hat „timeout“
        • 30 Minuten
    • 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“ ... ?
    • 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/
      • Frage ?
      • Danke !