Apache Trinidad

86
Apache Trinidad Hochwertige JSF Komponenten und vieles mehr...

description

A German presentation on Apache Trinidad, at the JAX 2007 (see www.jax.de)

Transcript of Apache Trinidad

Page 1: Apache Trinidad

Apache Trinidad

Hochwertige JSF Komponenten und vieles mehr...

Page 2: Apache Trinidad

2

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

• Das Trinidad Projekt• Die Komponenten

• Welche Komponenten finden sich wo?• Demonstration einiger Komponenten

• Das Framework• HTML Ajax RenderKit• Dialog Framework• Optimierte Komponentenspeicherung• Menu Model Abstraction• Maven 2 Faces plugin• Personalization Framework• RenderKit Skinning Architektur

Page 3: Apache Trinidad

3

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Das Apache Trinidad Projekt• Schenkung von Oracle• Gesponsert von der Apache MyFaces

PMC• Mentor Craig McClanahan (Mr. Struts)

• Apache Incubator bis Sonntag• 8 Committer (vier von Oracle)• Wachsende Community

• Unterprojekt von MyFaces (seit Sonntag)• Apache 2.0 Lizenz

Page 4: Apache Trinidad

4

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Was wurde eingebracht [1]?• JSF Komponenten

• rund 100 Komponenten plus Zusatz-Features

• Darüber hinaus • HTML AJAX RenderKit• Dialog Framework• Optimierte Speicherung des

Komponentenstatus• Test Framework

Page 5: Apache Trinidad

5

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Was wurde eingebracht [2]?• Menu Model Abstraktion• Maven 2 Faces Plugin

• Um Trinidad zu builden• Generiert Komponenten, Tags und XML-

Dateien

• Personalization Framework• RenderKit Skinning Architektur• Unterstützung von Facelets!

Page 6: Apache Trinidad

Arbeiten mit Apache TrinidadDer tägliche Umgang mit Apache Trinidad

Page 7: Apache Trinidad

7

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Das Trinidad-Projekt (1)• http://incubator.apache.org/adffaces• Wiki-Seite

• http://wiki.apache.org/myfaces/Trinidad

• SVN-Checkout• https://svn.apache.org/repos/asf/incubator/adffaces/

trunk/

• Bilden des Projekts (Konsole):• cd trinidad/trinidad

mvn install

Page 8: Apache Trinidad

8

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Das Trinidad-Projekt (2)

• Trinidad Archetype• lauffähiges Projekt-Gerüst mit

Maven/Trinidad

mvn archetype:create -DarchetypeGroupId=org.apache.myfaces.trinidadbuild -DarchetypeArtifactId=myfaces-archetype-trinidad -DarchetypeVersion=incubator-m1-SNAPSHOT

-DgroupId=myAppId -DartifactId=testApp

Page 9: Apache Trinidad

9

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Das Trinidad-Projekt (3)

• Trinidad JAR Files• trinidad-api-1.0.0-incubating• trinidad-impl-1.0.0-incubating

• Erstes Release innerhalb Apache• Download via webpage• Maven2 Incubator Repository• http://wiki.apache.org/myfaces/Trinidad

Page 10: Apache Trinidad

10

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Die Projektstruktur (1)• 4 Module

• trinidad-api• Basisklassen, abstrakte Klassen• Eingriff nur für Trinidad-Entwickler notwendig

• trinidad-impl• Renderer-Klassen, Util-Klassen, Funktionalität…• Eingriff bei Erstellung/Veränderung von

Komponenten

• trinidad-demo

Page 11: Apache Trinidad

11

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Die Projektstruktur (2)• trinidad-build

• zentrale Stelle für Definierung von• Komponenten • Renderern• Validatoren• Konvertern• Events

• \trinidad-build\src\main\resources\META-INF\maven-faces-plugin

• Generierung von Komponenten- & Tag-Klassen

Page 12: Apache Trinidad

12

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

JSF Komponentenentwicklung• Schreiben von Komponenten-, Render-,

Tag-Klassen• Definierung der Klassen/Zuordnungen in

XML• Abläufe immer sehr ähnlich• fehleranfällig• “unnötiger” Schreibaufwand• Einzig echter Aufwand

• Implementierung des Renderers

Page 13: Apache Trinidad

13

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Komponenten in Trinidad• Nur schreiben der Rendererklasse• in trinidad-impl

• trinidad-impl\src\main\java\org\apache\myfaces \trinidadinternal\renderkit\core

• Definierung der Komponente in trinidad-build• Refactoring & Generierung bei mvn install in

Trinidad-.jars• trinidad-api: Komponentenklassen• trinidad-impl: Rendererklassen• trinidad-impl: Taglibs

• Facelet’s Support for free, almost free...

Page 14: Apache Trinidad

Die Komponenten von Trinidad

ZurücklehnenundEntspannen!

Page 15: Apache Trinidad

15

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [1]

• <tr:breadCrumbs/> -Navigation • <tr:chart/> - Diagramm• <tr:chooseColor/> -

Datumseingabe• <tr:chooseDate/> - Farbeingabe• <tr:column/> - Spalte • <tr:commandButton /> - Button• <tr:commandLink /> - Schaltfläche

Page 16: Apache Trinidad

16

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Page 17: Apache Trinidad

17

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [1]

Page 18: Apache Trinidad

18

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

ChooseDate

• Die chooseDate Komponente wird mit einer inputDate Komponente verwendet

• Schnelle Auswahl eines Datums ohne zweites Fenster

<tr:chooseDate id="ch1" shortDesc="Choose Date"/>

<tr:inputDate id="df1a" chooseId="ch1" shortDesc="Choose Date"/>

Page 19: Apache Trinidad

19

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [2]• <tr:commandNavigationItem /> - Navigation• <tr:document/> - Seitencontainer• <tr:form/> - Formular• <tr:goButton /> - Button (kein Action)• <tr:goLink /> - Link (kein Action)• <tr:group /> - Gruppierung• <tr:icon /> - Skin Icon

Page 20: Apache Trinidad

20

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Document• Generiert die HTML Elemente:

• <html>, <body>, und <head>• Kann ebenso in allen nicht-HTML

Seiten verwendet werden<tr:document>

<f:facet name="metaContainer">

<f:verbatim><script...../></f:verbatim>

</f:facet>

</tr:document>

Page 21: Apache Trinidad

21

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [3]• <tr:image /> - Bild (<img>)• <tr:importScript /> - Script Imports• <tr:inputColor /> - Farbeingabe• <tr:inputDate /> - Datumseingabe• <tr:inputFile /> - Upload• <tr:inputHidden /> - Hidden Field• <tr:inputListOfValues /> aka LOV

Page 22: Apache Trinidad

22

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [3]

Page 23: Apache Trinidad

23

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [3]

Page 24: Apache Trinidad

24

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

ListOfValues• Spezialform einer text field Komponente• Mit Dialogsupport um einen Wert

auszuwählen• Trinidad Dialog Framework (später)

<tr:inputListOfValues label="Country:"

value="#{bean.value}"

searchDesc="Pick your country"

action="dialog:periodicTable"/>

Page 25: Apache Trinidad

25

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [4]• <tr:inputNumberSpinbox /> - Spinbox• <tr:inputText /> - Text• <tr:iterator /> - besseres forEach• <tr:legend /> - Legende• <tr:media /> - „Multimedia“• <tr:message /> - FacesMessage• <tr:messages /> - Messages...

Page 26: Apache Trinidad

26

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Page 27: Apache Trinidad

27

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

InputNumberSpinbox

• Spezielle input Komponente (für Zahlen)• Input Widget mit rauf/runter Pfeilen• stepSize

<tr:inputNumberSpinbox value="#{bean.year}"

minimum="1900" maximum="2050"/>

Page 28: Apache Trinidad

28

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [5]

• <tr:navigationPane/> - Navigationscontainer• <tr:navigationTree /> - Navigationscontainer• <tr:outputDocument /> - Text Format • <tr:outputFormatted /> - HTML Ausgabe• <tr:outputLabel /> - Label• <tr:outputText /> - Textausgabe• <tr:page /> - Seiten Layout

Page 29: Apache Trinidad

29

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Page 30: Apache Trinidad

30

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

NavigationPane / Tree• Generiert mehrere navigation items• Ein Knoten, der im Focus liegt, wird als

selected gerendert.

<tr:navigationPane hint="tabs" >

<tr:commandNavigationItem text="Page 1"

partialSubmit="true"

actionListener=

"#{demoCommandNavigationItem.navigationIt emAction}"/>...

</tr:navigationPane>

Page 31: Apache Trinidad

31

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [6]

• <tr:panelAccordion /> - Accordion• <tr:panelBorderLayout /> - Layout• <tr:panelBox /> - Layout• <tr:panelButtonBar /> - Button-Layout• <tr:panelChoice /> - Choice-Layout• <tr:panelFormLayout /> - Form-Layout• <tr:panelGroupLayout/> - Gruppen-

Layout

Page 32: Apache Trinidad

32

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [6]

Page 33: Apache Trinidad

33

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Page 34: Apache Trinidad

34

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [7]

• <tr:panelHeader /> - Header für Bereich• <tr:panelHorizontalLayout /> - Layout• <tr:panelLabelAndMessage /> - Container *• <tr:panelList /> - HTML Listen• <tr:panelPage /> - page-Erweiterung• <tr:panelPageHeader /> - Page-Header• <tr:panelPartialRoot /> - PPR Support

Page 35: Apache Trinidad

35

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Page 36: Apache Trinidad

36

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Page 37: Apache Trinidad

37

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

PanelLabelAndMessage• Layout Komponente• Kindkomponenten meistens input Komp.• Facetunterstützung (help/end)<tr:panelLabelAndMessage for="selectDate">

<f:facet name="help">

<tr:outputText value="Pick a date"/>

</f:facet>

<tr:inputDate id="selectDate"simple="true"/>

</tr:panelLabelAndMessage>

Page 38: Apache Trinidad

38

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [8]

• <tr:panelRadio /> - Wie panelChoice• <tr:panelSideBar /> - Seitennavigation• <tr:panelTabbed /> - Tabs...• <tr:panelTip /> - Hinweise• <tr:poll/> - PPR Komponente• <tr:processChoiceBar /> - Button + Choice• <tr:progessIndicator /> - PPR Fortschritt

Page 39: Apache Trinidad

39

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Page 40: Apache Trinidad

40

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Page 41: Apache Trinidad

41

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Poll / ProgressIndicator• Poll sendet PPR Request (in Millisek.)• ProgressIndicator hat spezielle Modelklasse

• BoundedRangeModel (abstract) und impl DefaultBoundedRangeModel

<tr:poll id="poll" interval="2000" />

<tr:progressIndicator action="end"

partialTriggers="poll" value="#{bean.model}">

..

Page 42: Apache Trinidad

42

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [9]

• <tr:resetButton /> - Button• <tr:selectBooleanCheckbox /> - Checkbox• <tr:selectBooleanRadio /> - Radio-Button• <tr:selectItem /> - Select Item• <tr:selectManyCheckbox /> - „many“

Checkbox• <tr:selectManyListbox /> - „many“ Listbox

Page 43: Apache Trinidad

43

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

SelectManyCheckbox• Generiert mehrere checkbox Felder

<tr:selectManyCheckbox label="Label" value="#{list.intArray}">

<tr:selectItem label="First" value="1"/>

<tr:selectItem label="Second" value="2"/>

<tr:selectItem label="Third" value="3"/>

</tr:selectManyCheckbox>

Page 44: Apache Trinidad

44

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [10]

• <tr:selectManyShuttle /> - Picklist• <tr:selectOneChoice /> - Choice-Auswahl• <tr:selectOneListbox /> - Listbox-Auswahl• <tr:selectOneRadio /> - Radio-Auswahl• <tr:selectOrderShuttle /> - Picklist• <tr:selectRangeChoiceBar /> - Range-

Auswahl• <tr:separator /> - Separation

Page 45: Apache Trinidad

45

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Page 46: Apache Trinidad

46

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Page 47: Apache Trinidad

47

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Shuttle Komponenten• Komponente um Werte von vorne nach

hinten zu verschieben („pick list“)

<tr:selectManyShuttle value=„#{bean.value}”>

<f:selectItems value=“#{bean.items}” />

</tr:selectManyShuttle>

<tr:selectOrderShuttle reorderOnly=“true”>

...

Page 48: Apache Trinidad

48

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [11]

• <tr:showDetail /> - „Toggling“• <tr:showDetailHeader /> - „Toggling“ • <tr:showDetailItem /> - Detail-Item• <tr:singleStepButtonBar /> - 1vonN-

Button• <tr:spacer /> - Leer-Element• <tr:subform /> - Teil-Formular

Page 49: Apache Trinidad

49

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Page 50: Apache Trinidad

50

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

SingleStepButtonBar• Rendert zwei Buttons

• Previous• Next• Text für den aktuellen „state“

<tr:singleStepButtonBar id="singleStep1"

selectedStep="2" maxStep="5" text="Stage"

previousAction="#{action.app1}"

nextAction="#{action.app2}"/>

Page 51: Apache Trinidad

51

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [12]

• <tr:table /> - Tabelle• <tr:train /> - Train• <tr:tree /> - Tree• <tr:treeTable /> - TreeTable

Page 52: Apache Trinidad

52

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Page 53: Apache Trinidad

53

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [12]

Page 54: Apache Trinidad

54

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Table - Sortieren<tr:column sortProperty="nachname" sortable="true" headerText="Nachname" formatType="text">

<tr:outputText value="#{person.nachname}"/></tr:column>

Page 55: Apache Trinidad

55

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Table - Selektieren

<tr:table binding="#{mybean.table}" rowSelection="multiple" ...>

<f:facet name="footer">

<tr:commandButton text="Delete" actionListener="#{mybean.performDelete}"/>

</f:facet> ...

</tr:table>

Page 56: Apache Trinidad

56

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Table – Selektieren - Backendpublic void performDelete(ActionEvent action) {

Set<String> selection = table.getSelectionState().getKeySet();

List<Person> selectedObjects = new

ArrayList<Person>(); for (String rowKey: selection) { table.setRowKey(rowKey); selectedObjects.add((Person)

table.getRowData()); } personList.removeAll(selectedObjects); table.getSelectionState().clear(); }

Page 57: Apache Trinidad

57

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

HTML Komponenten• <tr:body />• <tr:cellFormat />• <tr:frame />• <tr:frameBorderLayout />• <tr:head />• <tr:html />• <tr:rowLayout />• <tr:script />• <tr:styleSheet />• <tr:tableLayout />

Page 58: Apache Trinidad

58

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Helfer Objekte [1]

• <tr:attribute /> (nicht im JSF 1.2 branch)• <tr:forEach /> (nicht im JSF 1.2 branch)• <tr:validator /> (nicht im JSF 1.2 branch)• <tr:colorConverter />• <tr:dateTimeConverter />• <tr:numberConverter />

Page 59: Apache Trinidad

59

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Helfer Objekte [2]

• <tr:resetActionListener />• <tr:returnActionListener />• <tr:setActionListener /> (JSF 1.2 *)• <tr:validateByteLength />• <tr:validateDateTimeRange />• <tr:regExpValidator />

Page 60: Apache Trinidad

60

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Helfer Objekte [3]• <tr:validateDateRestriction />

invalidDaysOfWeek – String[]invalidMonths – String[]invalidDays – DateListProvider

public List <Date> getDateList(FacesContext context, Calendar base, Date rangeStart, Date rangeEnd);

Page 61: Apache Trinidad

Was bringt <tr:xxx /> ?

Page 62: Apache Trinidad

62

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Trinidad JSF Tags ...• Keine Notwendigkeit nur Trinidad Tags

zu verwenden (nicht wie bei Tobago)• Tags können mit Standardtags

gemischt werden (auch Tomahawk)• Trinidad Tags sind mächtiger:

• oft mehr Features• Verwendbar innerhalb von <tr:forEach />

(standardmäßig nicht)• Effizienteres client side state saving

• pro Komponente reduzierte Größe

Page 63: Apache Trinidad

63

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Standard vs Trinidad [1]• accesskey – accessKey• readonly – readOnly• alt and/or title – shortDesc • Style – inlineStyle• dir, lang – n/a (dir durch skinning)• h:outputLabel / h:inputText

• tr:inputText label=„myLabel“

• h:panelGrid tr:panelBox

Page 64: Apache Trinidad

64

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Standard vs Trinidad [2]• commandButton

• value vs text

• form• Kein NamingContainer (in Trinidad )

• Unterstützt legacy JS besser

• inputSecret• in Trinidad nicht vorhanden, stattdessen:

secret Attribut bei inputText

• uvm ... (siehe http://incubator.apache.org/adffaces/spec-diff.html)

Page 65: Apache Trinidad

Nur so wenige Komponenten?

Page 66: Apache Trinidad

66

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

HTML AJAX RenderKit• aka PPR (Partial Page Rendering)• Inkrementelle DOM-Aktualisierung• <iframe>-Kommunikations-Kanal (kein XmlHttpRequest

…)• unterstützt file-upload

• Client-side Validierungen (kein form.submit())• Bei allen Komponenten dabei

• auch weiterführend; z.b. Table data paging

Page 67: Apache Trinidad

67

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Verwendung von PPR• Drei wichtige Attribute:

• autoSubmit• Für input Komponenten um eine action zu

feuern

• partialSubmit• Für command Komponenten (link/button)

• partialTriggers• Für listeners

• Beziehen sich auf partial/auto Submit Komponente• „repainting“ der Komponente

Page 68: Apache Trinidad

68

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

<tr:selectOneRadio value="#{partialBean.selectOne}"

autoSubmit="true" id="select1">

<tr:selectItem label="First" value="Beer"/>

<tr:selectItem label="Second" value="more beer"/>

<tr:selectItem label="Third" value="sold out!"/>

</tr:selectOneRadio>

<tr:outputText value="#{partialBean.selectOne}"

partialTriggers="select1"/>

Page 69: Apache Trinidad

69

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Verwendung von PPR• Via Java API: UIXTable table = (UIXTable) event.getComponent().findComponent("userTable");

table.setValue(this.users);

RequestContext afContext = RequestContext.getCurrentInstance();

afContext.addPartialTarget(table);

Page 70: Apache Trinidad

70

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Poll Komponente• Oder... ein live-ticker<tr:poll pollListener="#{stocksBean.onPoll}"

interval="2000" id="pollid" />

<tr:table id="data" binding="#{stocksBean.table}"

border="2" partialTriggers="pollid" var="stock">

...

</tr:table>

Page 71: Apache Trinidad

71

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Poll Komponente (Bean)

• PollEvent / PollListener

public void onPoll(PollEvent event)

{

initStocks();

}

Page 72: Apache Trinidad

72

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Dialog Framework

• Verschachtelte page-flows• wizards

• Erweiterte Navigation „outcomes“ action=“dialog:wizard” (konfigurierbar)

• Isolierter Dialog/Prozess-scope• #{processScope.wizardBean}

• LaunchEvent und ReturnEvent

Page 73: Apache Trinidad

73

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Dialog FrameworkBeispiel:<tr:commandButton id="button2" text="No

Account?" action="#{dialogBean.createAccount}"

launchListener="#{dialogBean.launch}"

returnListener="#{dialogBean.returned}"

immediate="true" useWindow="true"

windowWidth="250" windowHeight="250"/>

Page 74: Apache Trinidad

74

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

public String createAccount(){

RequestContext rCtx = RequestContext.getCurrentInstance();

Map<String, Object> process = rCtx.getPageFlowScope();

process.put("tmpUser", new User());

return "dialog:newAccount";

}

public void returned(ReturnEvent event){

User u = (User) event.getReturnValue();

...

RequestContext.getCurrentInstance()

.getPageFlowScope().clear()

}

Page 75: Apache Trinidad

75

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Optimierte Status-Speicherung• JSF UIComponentBase basiert auf JavaBeans

• Benutzt Java-Reflection für Map Zugriffe

• Trinidad UIXComponentBase benutzt eine Map• JavaBeans property Methoden delegieren zur Map• Map benutzt PropertyKeys für optimierte

Performance

• Eliminiert die Notwendigkeit • saveState() und restoreState() Methoden der

Komponente zu schreiben

Page 76: Apache Trinidad

76

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

„klassische“ JSF Komponente• „normale“ setter Methoden / „funny“

getter Methodenpublic String getFoo(){

if (_foo != null) return _foo;

ValueBinding vb = getValueBinding("foo");

return vb != null ? (String)vb.getValue(getFacesContext())

: null;

}

Page 77: Apache Trinidad

77

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Trinidad Komponenten• Generierte Komponenten...• getProperty() / setProperty()

• UIXComponentBase

final public String getFoo(){

return

ComponentUtils.resolveString(getProperty (FOO_KEY) );

}

Page 78: Apache Trinidad

78

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Maven 2 Faces Plugin• Komponentenbehandlung siehe voriges

Kapitel• JavaCC Plugin

• legacy• TagDoc Plugin

• generiert Tag - Doku für JSF• faces-config.xml metadata• Doku von facets / events uvm.

• i18n Plugin• JavaScript Plugin

• Obfuscator, …• Jdev Plugin• XTRS Plugin

Page 79: Apache Trinidad

79

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Personalization Framework

• Eine Webapplikation für viele end-user• Jeder möchte das Erscheinungsbild

anpassen• z.B. Reihenfolge der Komponenten ändern

• ChangeManager wird benachrichtigt, wenn Benutzer die Änderung durchführt• Unterstützt auch Session-basierende

Änderungen

Page 80: Apache Trinidad

80

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

RenderKit Extension• Senden von JavaScript an den Client:

FacesContext facesContext = FacesContext.getCurrentInstance();

ExtendedRenderKitService service =

(ExtendedRenderKitService)Service.getRenderKitService (facesContext,ExtendedRenderKitService.class);

service.addScript(facesContext,"alert('Script added by ExtendedRenderKitService')");

Page 81: Apache Trinidad

81

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

RenderKit Skinning Architecture• Bisher: Styling über styleClass oder style• Passiert auf Ebene von DOM-Knoten • Besser: Abstraktes Styling auf

Komponentenebene• Trinidad Skinning

• Anpassbares look and feel• Portabel über Applikationen hinweg• Portabel über RenderKits hinweg• Null Code

• CSS 3.0 Syntax

Page 82: Apache Trinidad

82

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

RenderKit Skinning Architecture• Anlegen einer CSS Datei

• Registrieren der Datei in der trinidad-config.xml und der trinidad-skins.xml

• Referenzieren auf Komponenten über Pseudoelemente• af|Komponente::Attribut { … }• zb.:

af|panelTabbed::tab { font-weight:bold; font-family:Tahoma; padding:2px 8px;}

Page 83: Apache Trinidad

83

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

RenderKit Skinning Architecture• auch vordefinierte globale Selektoren

• .AFButtonServerText:alias {..}• :alias heißt, dass Style mehrere

Komponenten beeinflußt• http://incubator.apache.org/adffaces/skin-

selectors.html

Page 84: Apache Trinidad

84

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Konfiguration• /WEB-INF/trinidad-config.xml<?xml version="1.0"?> <trinidad-config xmlns="http://myfaces.apache.org/trinidad/config"><!-- Enable debug output --> <debug-output>true</debug-output><accessibility-mode>#{user.accessibilityMode}</accessibility-mode><skin-family>customSkin</skin-family>

</trinidad-config>

Page 85: Apache Trinidad

85

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Interessante Konfigurationsitems

• Accessibility:default, inaccessible, screen-reader

• right-to-left:false, true

• debug-output:false, true

Page 86: Apache Trinidad

86

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Demo Anwendung FacesGoodies

• Quickstart für Trinidad• Facelets und Shale• Spring 2 und JPA (Toplink als Impl)

• http://code.google.com/p/facesgoodies• Frei nutzbar für Ihr (erstes) Trinidad

Projekt