ajax in apache myfacespeople.apache.org/.../mo23/ajax_myfaces_presentation.pdf · 2013-05-27 ·...

38
1 AJAX in Apache MyFaces Gerald Müllan Matthias Weßendorf A New Approach To Web Applications

Upload: others

Post on 08-Aug-2020

60 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

1

AJAX in Apache MyFaces

Gerald MüllanMatthias Weßendorf

A New Approach To Web Applications

Page 2: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

2

Gerald MüllanApache MyFaces contributorWeb-Engineer with focus on JavaServer FacesIntegration of AJAX into

Apache MyFacesAJAXInputSuggestAutoUpdateDataTable

JSF web applications

Employee of Irian, an Austrian IT-CompanyIRIAN co-founded MyFacesfocuses on J2EE based application development

Page 3: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

3

Matthias Weßendorf

Apache MyFaces committer / PMCauthor of German books

Struts 1.2Web Services and mobile clientsJavaServer Faces 1.2 (soon)

author of German articlesstuff related to JSF (Facelets, AJAX, Spring,...)

Page 4: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

4

Table of ContentIntroduction AJAX and Web 2.0Integrating AJAX in JavaServer Faces

The three strategies AJAX MyFaces components

AJAXInputSuggestAutoUpdateDataTable

Discussion (or Question & Answer)

Page 5: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

5

Table of ContentIntroduction AJAX and Web 2.0Integrating AJAX in JavaServer Faces

The three strategies AJAX MyFaces components

AJAXInputSuggestAutoUpdateDataTable

Discussion (or Question & Answer)

Page 6: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

6

The New Web - Web 2.0desktop applications provide richness and interactivity to the userweb applications should go the same wayWeb 2.0 services may replace desktopapplications Web 2.0

fully-fledged computing platforms serve web applications to end userspersonal content, social networkspurely web based

Page 7: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

7

The New Web - Web 2.0complex and evolving technology infrastructure

server softwareclient applicationscontent syndication messaging protocols

A Web 2.0 site is built of many techniquesone of these is AJAX

Page 8: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

8

What is AJAX?

a new approach to web applicationsa terminology affected by “Jesse James Garrett”from Adaptive Path in february 2005short name for “Asynchronous JavaScript And XML”becomes a new hype in 2005popularity raised with the help of Google

Gmail, Google Maps, Google Suggest

Page 9: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

9

What is AJAX?

a bundle of common used techniquesHTML (or XHTML) and CSSDocument Object Model (DOM) XMLHttpRequest ObjectXML

JavaScript

hence not a new technologyformer called “server interaction via XMLHttpRequest”

Page 10: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

10

AJAX Interaction

an AJAX application looks as if it resided on theuser's machinedata is asynchronously fetchedJavaScript call to AJAX engine

HTTP - Request back to serverhandling on its own

validation

browser is updated with gathered informationnot entirely refreshed

Page 11: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

11

HTTP Request - Response

Page 12: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

12

AJAX Request - Response

Page 13: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

13

XMLHttp Object

Http request to server using a JavaScript objectMicrosoft:

XMLHttp since IE 5.0 (ActiveX Object)Instantiation:

if (window.ActiveXObject) // IE{

http_request = new ActiveXObject("Microsoft.XMLHTTP");

}

Page 14: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

14

XMLHttpRequest ObjectMozilla, Safari..

XMLHttpRequestsupports same methods and properties

if (window.XMLHttpRequest) // Mozilla, Safari {

http_request = new XMLHttpRequest();}

function call after server response: (for both)http_request.onreadystatechange = function(){

// do useful stuff};

Page 15: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

15

XMLHttpRequest Objectmake the request:

http_request.open('GET', URL, true);

asynchronous/synchronousAJAX!!

GET, POST, HEAD…

http_request.send(null);

response ok, continue processing:if (http_request.readyState == 4)

check the status code:if (http_request.status == 200)

Page 16: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

16

JavaScript Libraries

need of JavaScript librariesAJAX supportvisual effects

prototype.jsopen-source JavaScript frameworkused in MyFaces AJAX componentsalso used by script.aculo.us

rico.jsdrag and drop management

Page 17: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

17

Pros of AJAX

richness and interactivityAJAX effects look great

only parts of the page are changedless redundant datafaster update of the page

no stalling of user’s interaction with the application no plug-in needed

like flash, shockwave..

Page 18: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

18

Pros of AJAX

platform independentworks across all browsers if JavaScript isenabledworks across all operating systems

Page 19: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

19

Cons of AJAX

web application can feel inactive to a userstate handling

Browsers „back“ buttonbookmarking

need of JavaScript supportdifferences of browsers -> more testing

not a big issue with JavaScript libraries(AJAX-Engine)

Page 20: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

20

Table of ContentIntroduction AJAX and Web 2.0Integrating AJAX in JavaServer Faces

The three strategies AJAX MyFaces components

AJAXInputSuggestAutoUpdateDataTable

Discussion (or Question & Answer)

Page 21: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

21

First Strategy (simplest one)

uses only standard components<h:form/>,<h:InputText/>,<h:OutputText/>

for the result<div>…</div>

binding of JavaScript librariesbinding of CSS filesseparate Servlet

reads from <h:InputText> through id form:inputreturns <ul>..<li> ..</li>…</ul>

Page 22: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

22

<f:view><h:form id="form"><h:panelGrid columns="2">

<h:outputText value=“Input"/><h:inputText id=“input“

value="#{ajaxbacking.input}"/><h:commandButton value=“send"/>

</h:panelGrid></h:form><h:outputTextvalue=“Value:#{ajaxbacking.input}"/>

</f:view><div id="results" class="ajax"></div>

<script>new Ajax.Autocompleter('form:input',

'results','ajax/suggest');</script>

First Strategy: The .jsp

Page 23: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

23

First Strategy: Problems

change of id -> not genericno autocomplete attribute of <h:inputText/>

dependence of JavaScript librariesmixing of roles

page authorcomponent writer

Page 24: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

24

Second Strategy

reuse of standard component <h:inputText/>

-> AJAX component <ajax:inputText/>

takes care of ressource bindingattributes: value, resourceURL

component writer:renderer classtag class

more compact

Page 25: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

25

Second Strategy: The .jsp

<f:view><h:form id="form">

<h:panelGrid columns="2"><h:outputText value=“Input:"/><ajax:inputText id=“input"

value="#{ajaxbacking.input}"resourceURL="ajax/suggest"/>

<h:commandButton value=“send"/><h:outputTextalue="Wert:#{ajaxbacking.input}"

rendered="#{!empty ajaxbacking.input}"/></h:panelGrid>

</h:form></f:view>

Page 26: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

26

Strategy 2: The Rendererpublic void encodeBegin(FacesContext context,

UIComponent component) throws IOException {

this.encodeResources(context, component);ResponseWriter out = context.getResponseWriter();String clientId = component.getClientId(context);out.startElement("input", component);out.writeAttribute("name", clientId, null);out.writeAttribute("id", clientId, null);out.writeAttribute("autocomplete", "off", null);…"new Ajax.Autocompleter ('"+component.getClientId

(context)+"', '"+DIV_ID+"','"+component.getAttributes().get("resourceURL")+"');…

Page 27: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

27

Second Strategy: Problems

still relying on servletparameter form:input must match

-> solution without filter or servlet

Page 28: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

28

Third Strategy

adding a PhaseListenerhandles the requestserves the resourceswrites <ul>..<li> ..</li>…</ul> in the response

tag classno resourceURL attribute

rendererno servlet mappinghandling through JSF engine (actionURL)

Page 29: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

29

Third Strategy: Impacts

no external resourcesServletServletFilter

cleanest strategybut: lookup of list items in PhaseListenerbetter solution:

component attribute with reference to backing bean-> MyFaces AJAX components

Page 30: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

30

Table of ContentIntroduction AJAX and Web 2.0Integrating AJAX in JavaServer Faces

The three strategies AJAX MyFaces components

AJAXInputSuggestAutoUpdateDataTable

Discussion (or Question & Answer)

Page 31: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

31

AJAXInputSuggest

sandbox componentautosuggest control with AJAXsuggestedItemsMethod

method of backing bean delivers preview data realized with MethodBinding

call order1.) Ajax request2.) suggestionMethod in backend bean

Page 32: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

32

AJAXInputSuggest

callorder3.) values pushed into the control binding4.) result sent back to the client 5.) control shows suggestion drop down

uses prototype.jsAjax.MyFacesAutocompleter(…)-> Ajax.Base(…)

Page 33: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

33

AJAXInputSuggest: .jsp

<h:form><h:panelGrid columns="3“>

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

suggestedItemsMethod=“#{product.getSuggestedProducts}"

value=“#{product.productNameToSearch}"/><x:commandButton value="#{label.productButton}"

action="#{product.searchForProducts}"/></h:panelGrid>

</h:form>

Page 34: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

34

AJAXInputSuggest:suggestedItemsMethod

public List getSuggestedProducts(String prefix){

List<String> suggestedNames = new ArrayList<String>();

Session session = getSession();Criteria crit = session.createCriteria(Product.class)

.add(Restrictions.like("name","%"+prefix+"%"));

List<Product> tempProds = crit.list();

for(Product prod : tempProds)suggestedNames.add(prod.getName());

return suggestedNames;}

Page 35: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

35

AutoUpdateDataTable

sandbox componentfrequency controlled updated DataTableuses prototype.js

Ajax.PeriodicalUpdater(…)

Page 36: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

36

AutoUpdateDataTable: .jsp<h:form>

<s:autoUpdateDataTablevar="bids“value="#{dataTableData.bids}"preserveDataModel="true"frequency="3">

<h:column><f:facet name="header">

<h:outputText escape="false" value=“Bid"/></f:facet><h:outputText value="#{bids.bidData}" />

</h:column></s:autoUpdateDataTable>

</h:form>

Page 37: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

37

Links and books

MyFaces AJAX exampleshttp://www.irian.at/open_source.jsf(sandbox components)

AJAX web resourceshttp://www.adaptivepath.comhttp://www.ajaxinfo.com/http://www.ajaxpatterns.org/Ajax_Frameworkshttp://www.ajaxdeveloper.org

Page 38: AJAX in Apache MyFacespeople.apache.org/.../MO23/AJAX_MyFaces_Presentation.pdf · 2013-05-27 · JavaScript Libraries need of JavaScript libraries AJAX support visual effects prototype.js

38

Questions ?

Answers!