Apache Trinidad

Post on 13-Dec-2014

17.504 views 16 download

description

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

Transcript of Apache Trinidad

Apache Trinidad

Hochwertige JSF Komponenten und vieles mehr...

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

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

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

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!

Arbeiten mit Apache TrinidadDer tägliche Umgang mit 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

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

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

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

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

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

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...

Die Komponenten von Trinidad

ZurücklehnenundEntspannen!

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

16

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

17

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [1]

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"/>

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

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>

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

22

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [3]

23

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [3]

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"/>

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...

26

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

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"/>

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

29

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

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>

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

32

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [6]

33

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

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

35

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

36

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

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>

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

39

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

40

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

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}">

..

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

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>

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

45

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

46

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

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”>

...

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

49

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

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}"/>

51

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [12]

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

52

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

53

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Core Komponenten [12]

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>

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>

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(); }

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 />

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 />

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 />

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);

Was bringt <tr:xxx /> ?

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

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

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)

Nur so wenige Komponenten?

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

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

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"/>

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);

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>

71

Apache Trinidad – 1st class JSFMatthias Wessendorf Oracle Corp.

Poll Komponente (Bean)

• PollEvent / PollListener

public void onPoll(PollEvent event)

{

initStocks();

}

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

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"/>

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()

}

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

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;

}

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) );

}

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

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

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')");

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

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;}

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

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>

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

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