• Save
AdvancedJSF
Upcoming SlideShare
Loading in...5
×
 

AdvancedJSF

on

  • 9,404 views

 

Statistics

Views

Total Views
9,404
Views on SlideShare
9,386
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
    View slide
  • 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
    View slide
  • 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 !