apache myfaces and ajax

27
Ajax in Apache MyFaces „A new Approach to Web Applications“

Upload: mwessendorf

Post on 17-Dec-2014

9.022 views

Category:

Technology


5 download

DESCRIPTION

A German talk on Ajax in JSF/MyFaces

TRANSCRIPT

Page 1: Apache MyFaces and Ajax

Ajax in Apache MyFaces

„A new Approach to Web Applications“

Page 2: Apache MyFaces and Ajax

2

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

Agenda

• AJAX und JavaServer Faces• AJAX Komponenten in MyFaces • Widgets in Tomahawk & Sandbox

Page 3: Apache MyFaces and Ajax

3

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

Web 2.0 - Überblick

Web 1.0

Statisches HTML

Web 1.5

Dynamisches HTMLJSP, Servlets

Web 2.0

Web-Anwendungen mit hoher! Dynamischer Interaktion mit dem Server. *

Page 4: Apache MyFaces and Ajax

4

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

(Ajax) JavaScript Bibliotheken

• Abstraktion• Kein direktes Arbeiten mit XMLHttpRequest (XHR)

• Bibliotheken bieten…• ... AJAX support• …”visual effects”• …”widgets” (dojo toolkit oder YUI)• …einfaches Arbeiten JavaScript• …objektorientiertes JavaScript!

Page 5: Apache MyFaces and Ajax

5

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

JavaScript und OOfunction TrDateTimeRangeValidator( maxValue, minValue, messages){ this._maxValue = maxValue; this._minValue = minValue; this._messages = messages; // for debugging this._class = "TrDateTimeRangeValidator";}

TrDateTimeRangeValidator.prototype = new TrValidator();

TrDateTimeRangeValidator.prototype.validate = function( value, label, converter) { ... }

Page 6: Apache MyFaces and Ajax

6

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

JSF ist...• ein(e) ...

• ... Java-Technik für Web-Anwendung• API für Components• Lightweight Framework

• ... Komponenten-orientiertes Framework• ... Event-basiertes Framework framework• ... RAD• ... Industrie Standard (JCP; JSRs)

• Oracle, Sun, IBM, Apache, …

Page 7: Apache MyFaces and Ajax

7

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

Ajax-Integration mit JSF

• Servlets• Außerhalb von JSF...

• ServletFilters• Außerhalb von JSF...

• PhaseListeners• Innerhalb der JSF Engine

Page 8: Apache MyFaces and Ajax

8

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

AJAX in MyFaces• Ajax API in Sandbox:

• AjaxComponent• AjaxRenderer• AjaxSuggestRenderer• AjaxDecodePhaseListener

• Verwendung von JSF PhaseListener• AjaxDecodePhaseListener für Phase 2

(Apply Request Values)• beforePhase() ausprogrammiert• afterPhase() leer

Page 9: Apache MyFaces and Ajax

9

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

AJAX in MyFaces• AjaxDecodePhaseListener

• Warten auf eingehenden AJAX request• Kennzeichnung durch Http Request Parameter

• Lädt die betroffene Komponente aus dem JSF Komponentenbaum

• decode() und encode() wird an die Komponente / den Renderer delegiert für die weitere Verarbeitung

• Nach der Auslieferung des Response wird der JSF Lifecycle gestoppt

• facesContext.responseComplete();

Page 10: Apache MyFaces and Ajax

10

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

AJAX in MyFacespublic class SuggestAjax ... implements AjaxComponent{...public void encodeAjax(FacesContext context)throws IOException {if (context == null) throw new NullPointerException("context");if (!isRendered()) return;Renderer renderer = getRenderer(context);if (renderer != null && renderer instanceof AjaxRenderer){ ((AjaxRenderer) renderer).encodeAjax(context, this); }}

Page 11: Apache MyFaces and Ajax

11

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

AjaxDecodePhaseListener(ApplyRequestValues)

Page 12: Apache MyFaces and Ajax

12

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

AJAX in MyFaces Beispiele

• Ajax Suggest Komponenten• InputSuggest (standard)

• Zeigt Liste von vorgeschlagenen Werten• Basiert auf Dojo Toolkit “comboBox” widget

• TableSuggest (advanced mode)• Vorgeschlagene Werte mit Tabellen-Syntax• Basiert auf der Dojo Toolkit AJAX API (dojo.io.bind)

• Partial Page Rendering (PPR) mit Tomahawk/Sandbox• Einfaches PPR mit MyFaces• DataScroller mit PPR• Periodical update einer Tabellen-Komponente

Page 13: Apache MyFaces and Ajax

13

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

SuggestAjax (Basisklasse)• suggestedItemsMethod

• Methode einer JSF Backing Bean • Liefert die gewünschten Daten für die “Suggest Liste” • Komponente benutzt JSF’s MethodBinding für den

Aufruf• Arbeitsweise:

• 1.) Ajax request• 2.) AjaxDecodePhaseListener ruft SuggestAjax comp.

auf• 3.) Delegation an den Renderer• 4.) Aufruf der Managed Bean Method• 5.) Methode liefert java.util.List• 6.) Ergebnis zum Client senden

Page 14: Apache MyFaces and Ajax

14

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

InputSuggestAjax: .jsp<h:form> <h:panelGrid columns="3">

<x:outputLabel value="#{label.title_product}"/>

<s:inputSuggestAjax suggestedItemsMethod= "#{bean.getCustomers}" value= "#{bean.customer}"/>

<x:commandButton value="#{label.productButton}" action="#{product.searchForProducts}"/> </h:panelGrid></h:form>

Page 15: Apache MyFaces and Ajax

15

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

InputSuggestAjax:suggestedItemsMethod

• Implementierung:

public List getCustomers(String secondname){ return getCustomerService() .queryCustomerBySecondname(secondname);}

• Service Spring Bean• Spring Bean DAO / Repository

• Query JPA Query

Page 16: Apache MyFaces and Ajax

16

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

TableSuggestAjax: .jsp<s:tableSuggestAjax

var=“customer“ startRequest="2“ suggestedItemsMethod="#{bean.getCustomers}"> <t:column> <f:facet name="header"> <s:outputText value="city"/> </f:facet> <s:outputText for="cityField" label="#{address.city}"/> </t:column> …</s:tableSuggestAjax>

Page 17: Apache MyFaces and Ajax

17

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

PPR mit pprPanelGroup

• Eine PPR-Implementierung innerhalb von MyFaces Tomahawk

• Realisierung mit PhaseListener• RenderResponse (beforePhase())• der AJAX-Request ist ein vollständiger

JSF-Request• Rendered XML statt HTML...

Page 18: Apache MyFaces and Ajax

18

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

PPRPhaseListener

Page 19: Apache MyFaces and Ajax

19

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

Einfaches PPR<h:form id="mainform"> <h:inputText value="#{exampleBean.suggestValue}"/> <h:commandButton value="update" id=„button" /> <s:pprPanelGroup id="suggestValue" partialTriggers="button"> <h:outputText

value="#{exampleBean.suggestValue}"/> </s:pprPanelGroup>

</h:form>

Page 20: Apache MyFaces and Ajax

20

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

Data Scroller mit PPR<s:pprPanelGroup id="dataTableArea"

partialTriggerPattern="mainform:.*"> <t:dataTable id=„data“ var="address" ...> <t:column> <f:facet name="header"> <h:outputText value="streetnumber"/> </f:facet> <h:outputText value="#{address.streetNumber}"/> </t:column> ... </t:dataTable> <t:dataScroller for=„data“> ... </t:dataScroller></s:pprPanelGroup>

Page 21: Apache MyFaces and Ajax

21

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

Tabellen Updates mit PPR<s:pprPanelGroup id="periodicalUpdatedArea„ periodicalUpdate="2000">

<t:dataTable var="address" value="#{pprExampleBean.periodicalUpdatedValues}">

<t:column> ... </t:column> ... </t:dataTable>

</s:pprPanelGroup>

Page 22: Apache MyFaces and Ajax

22

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

Dojo Toolkit und MyFaces• MyFaces erst Prototype nun Dojo!• Vorteile

• Große Bibliothek• Abstraktions-Layer für JS-Handling• AJAX api (dojo.io.bind)• Visuelle Effekte• JavaScript Events / Event Handling• Viele schöne Widgets! (Komponenten)

• Package-System “namespacing”• Keine Namenskonflikte!• Lazy-load für JavaScript Module (Performance)

• Obfuscating möglich

Page 23: Apache MyFaces and Ajax

23

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

Dojo Toolkit und MyFaces• Integration von Dojo in Tomahawk (1.1.5)

• Sandbox hat viele Widgets• Dojo-Widgets auf JSF-Komponenten abgebildet

• <t:dojoInitializer …/>• Deployment der JavaScript Files• Einfache Integration von Dojo in die JSF-

Anwendung• WYSIWYG-Editor:

<t:dojoInitializer require="dojo.widget.Editor"/><h:inputTextarea id="editarea2" styleClass="dojo-Editor" value="hello world“/>

Page 24: Apache MyFaces and Ajax

24

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

Dojo Widgets der Sandbox

• FishEye<s:fishEyeNavigationMenu ... visibleWindow="3" >

<s:fishEyeCommandLink caption="#{labels.labels[item.caption]}" iconSrc="#{item.iconSrc}" target="#{item.target}" actionListener="#{item.action}"/>

</s:fishEyeNavigationMenu>

Page 25: Apache MyFaces and Ajax

25

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

Dojo Widgets der Sandbox

• Image Loop<s:imageLoop ...>

<s:imageLoopItem url="images/imageloop1.png"/>

<s:imageLoopItems value="#{imageLoopBean.imageCollection}"/>

</s:imageLoop>

Page 26: Apache MyFaces and Ajax

26

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

Weitere Informationen

• Folien• http://www.slideshare.net/mwessendorf

• Apache MyFaces Buch• JSF @Work – Martin Marinschek

• Apache MyFaces Beispiele• http://www.irian.at/myfaces.jsf

• Apache MyFaces und JSF Support• http://www.irian.at

Page 27: Apache MyFaces and Ajax

27

MyFaces & Ajax Matthias Wessendorf, Oracle Corp.

Fragen?